Seite 1 von 2
CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:19 pm
von martin753
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
Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:28 pm
von MoonGuy
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.
Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:43 pm
von martin753
€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

Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:47 pm
von MoonGuy
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.
Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:50 pm
von martin753
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

Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 4:57 pm
von MoonGuy
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.
Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 5:01 pm
von martin753
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
Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 5:09 pm
von MoonGuy
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.
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

Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 5:16 pm
von martin753
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
Also ist es auch bisschen schwieriger und schnell zu vergessen

aber wenn man was wirklich lernen will, dann strebt man auch dafür

Re: CodeBlock -std=c99 or -std=gnu99
Verfasst: So Nov 06, 2011 5:22 pm
von cloidnerux
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^^