CodeBlock -std=c99 or -std=gnu99

Schnelle objektorientierte, kompilierende Programmiersprache.
martin753
Beiträge: 5
Registriert: So Nov 06, 2011 4:00 pm

CodeBlock -std=c99 or -std=gnu99

Beitrag von martin753 » So Nov 06, 2011 4:19 pm

Hallo proggen.org,

ich habe diese Seite hier gestern entdeckt, habe mir alles in Ruhe durchgelesen.
Und dann war ich der Meinung das ich mit der Programmiersprache C beginne.
Mir hat alles so viel Spaß gemacht, ich habe probiert und alles und ich fand es toll.
Doch beim C-Tutorial -> Grundlagen -> Kapitel 6. Wiederholungen, kommt ein Fehler in meiner Konsole.

#include <stdio.h>

int main(void)
{
for( int wert = 1; wert <= 10; wert = wert + 1 )
{
printf( "Ich bin bei '%d'\n", wert );

if( !(wert & 1))
{
printf( "Dieser Wert ist durch zwei teilbar." );
}
}

return 0;
}

Das obere gebe ich bei CodeBlock ein und bei meiner Konsole gebe ich gcc while.c (dieses Kapitel hab ich nach while in meinem Ordner genannt) ein.
Dann kommt folgender Fehler:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code


Bitte helfen, ich will hier weiter lernen, das macht mir riesen Spaß :)
Dankeschön im vorraus.
Martin

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von MoonGuy » So Nov 06, 2011 4:28 pm

martin753 hat geschrieben:Hallo proggen.org,

ich habe diese Seite hier gestern entdeckt, habe mir alles in Ruhe durchgelesen.
Herzlich Willkommen! Xin wird dir, wenn er das hier liest folgendes ans Herz legen: User-Vorstellungen :)
martin753 hat geschrieben: Und dann war ich der Meinung das ich mit der Programmiersprache C beginne.
Mir hat alles so viel Spaß gemacht, ich habe probiert und alles und ich fand es toll.
Das ist schön^^
martin753 hat geschrieben: Das obere gebe ich bei CodeBlock ein und bei meiner Konsole gebe ich gcc while.c (dieses Kapitel hab ich nach while in meinem Ordner genannt) ein.
Dann kommt folgender Fehler:
error: 'for' loop initial declarations are only allowed in C99 mode
note: use option -std=c99 or -std=gnu99 to compile your code


Bitte helfen, ich will hier weiter lernen, das macht mir riesen Spaß :)
Dankeschön im vorraus.
Martin
C unterstützt von Haus aus keine Initialisierung im for-loop Header.
Also darfst du keine Integer im Kopf deiner Schleife "erstellen". Wenn du C++ benutzt oder C Versionen ab 1999 ist dies jedoch gestattet.

Speichere deine Datei als *.cpp (Code-Blocks sollte sie dann als g++ statt gcc compilen) oder Initialisiere "wert" am Anfang der Funktion und deklariere nur im for-loop.
Also "int wert;" am Anfang und im for-loop nur "wert = 1"

Mal eine Frage: Ist dir folgendes als Anfänger schlüssig:

Code: Alles auswählen

if( !(wert & 1))
{
printf( "Dieser Wert ist durch zwei teilbar." );
} 
?

€dit: Es kann auch sein, das Code-Blocks die alte C Version annimmt, da du den alten main-header benutzt. int main(void) ist veraltet. Heutzutage benutzt man int main(int argc, char **argv). Dann kann man direkt Parameter beim Aufrufen übergeben. Dazu wirst du vermutlich noch mehr lesen können im Wiki. Bin mir aber nicht sicher, ob das wirklich der Grund ist.

€dit²: Ich sehe gerade, du tippst selber gcc while.c ein. Du kannst auch einfach g++ while.c schreiben oder gcc while.c -std=c99. Damit sagst du dem Compiler, du würdest gerne C++ bzw. die C Version c99 verwenden.

martin753
Beiträge: 5
Registriert: So Nov 06, 2011 4:00 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von martin753 » So Nov 06, 2011 4:43 pm

€dit²: Ich sehe gerade, du tippst selber gcc while.c ein. Du kannst auch einfach g++ while.c schreiben oder gcc while.c -std=c99. Damit sagst du dem Compiler, du würdest gerne C++ bzw. die C Version c99 verwenden.
Du hast mir geholfen dankee :)
Und deine Frage habe ich nicht so ganz verstanden :)

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von MoonGuy » So Nov 06, 2011 4:47 pm

martin753 hat geschrieben:Und deine Frage habe ich nicht so ganz verstanden :)
Die Frage war, ob du verstehst, warum es durch Zwei teilbar ist oder nicht, anhand dieses if-statements.

martin753
Beiträge: 5
Registriert: So Nov 06, 2011 4:00 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von martin753 » So Nov 06, 2011 4:50 pm

Ahso, nein :) aber ich werde gleich wieder loslegen und alles langsam und genau lesen. Wenn ich was nicht versteh dann melde ich mich. Aber danke :D

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von MoonGuy » So Nov 06, 2011 4:57 pm

Das wollte ich wissen. Weil es eventuell von Nachteil ist, Neueinsteiger mit so etwas zu konfrontieren.

Als Erklärung:
Der &-Operator überprüft Bitweise die Daten

Also x & 1 überprüft, ob das erste Bit 1 oder 0 (true oder false) ist.

Eine gute Eigenschaft des Binärsystems ist, dass alle geraden Zahlen eine 0 im ersten Bit haben und alle Ungeraden eine 1. Die Logik dahinter wird allein aus einer Tabelle schlüssig:
Dezimal: 0 1 2 3 4 5
Binär: 0 1 10 11 100 101
Wenn eine Zahl um 1 inkrementiert wird, ändert sich immer das erste Bit. Und eine Zahl Plus eins bedeutet, sie wechselt von Gerade zu Ungerade (vice versa)

Bin eben nicht so ganz von diesem Satz aus dem Tutorial überzeugt:
Wir werden uns diesen Ausdruck in einer späteren Lektion wieder ansehen und erklären - also: Neugierig blieben! Bis dahin gilt ganz einfach: Er funktioniert.
Es stimmt zwar, aber man könnte auch einfach den % Operator einführen. Dann ist der ganze Ausdruck leichter zu verstehen.

martin753
Beiträge: 5
Registriert: So Nov 06, 2011 4:00 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von martin753 » So Nov 06, 2011 5:01 pm

Irgendwie voll komisch, gestern hab ich von 18 Uhr bis 1 Uhr nachts auf dieser Seite gespielt, dann kam der Fehler und hab aufgehört, heute bin ich irgendwie voll durcheinander und kann nicht mehr klar denken :)

Ist das normal, dass man manchmal plötzlich den Faden verliert ?:D

MoonGuy
Beiträge: 231
Registriert: Fr Okt 08, 2010 2:49 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von MoonGuy » So Nov 06, 2011 5:09 pm

martin753 hat geschrieben:Irgendwie voll komisch, gestern hab ich von 18 Uhr bis 1 Uhr nachts auf dieser Seite gespielt, dann kam der Fehler und hab aufgehört, heute bin ich irgendwie voll durcheinander und kann nicht mehr klar denken :)
Das ist Übungssache. Als ich angefangen hatte, musste ich die erste Woche jedesmal bei 0 anfangen. Irgendwann sieht man seine tausendste main Funktion. Den millionsten loop und so weiter. Dann kann man immer wieder rein. Besonders als Anfänger sind auch die Pausen ganz böse. Versuche besonders viele Kommentare zu verwenden, die dir das wieder Einfinden erleichtern. Computer denken anders (als Menschen), deshalb muss man sich daran erstmal gewöhnen.

Bild

Exkurs: Als ich mit dem Gitarre spielen anfing und mal einen Tag nicht geübt hatte, waren meine Finger wieder auf Null. Mittlerweile klappt es, aber ich schaffe es gar nicht, mal einen Tag nicht zu üben :)

martin753
Beiträge: 5
Registriert: So Nov 06, 2011 4:00 pm

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von martin753 » So Nov 06, 2011 5:16 pm

Hmm.. z.B. in der Schule haben wir HTML gelernt, aber da hat der Lehrer Aufgaben gegeben und so und man hat das halt öfters wiederholt, wenn man was nicht konnte hat man den gerufen.
Und jetzt versuche ich mir C beizubringen, aber ich mache das alleine und kriege keine Hilfe von Lehrern :D

Also ist es auch bisschen schwieriger und schnell zu vergessen :D aber wenn man was wirklich lernen will, dann strebt man auch dafür :)

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3125
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: CodeBlock -std=c99 or -std=gnu99

Beitrag von cloidnerux » So Nov 06, 2011 5:22 pm

Hi und Willkommen im Forum, auch von mir nochmal.
Und jetzt versuche ich mir C beizubringen, aber ich mache das alleine und kriege keine Hilfe von Lehrern
Ich habe C auch gelernt ohne Hilfe, großteils ohne Internet und dank eines veralteten Tutorials mit TurboC auf Windows XP. Ich habe teilweise Stundenlang iwelche Banalitäten gesucht und mich über vergessene Klammern und ähnlichem aufgeregt, das Resultat war aber, das ich Code besser verstehe, weil ich ich stärker damit auseinander gesetzt habe, ich finde Bugs schneller und bin nicht mehr so schnell Demotiviert.
Zusätzlich habe ich gelernt "richtig" zu suchen, um die Informationen zu bekommen die ich zur Problemlösung brauchte.
Alles in allem also sehr positiv, man muss aber erstmal die Startschwierigkeiten überwinden.
Hmm.. z.B. in der Schule haben wir HTML gelernt,
Wie du vlt auch schon bemerkt hast: HTML != C/C++
Von daher darfst du das nicht vergleichen^^
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten