Anfänger:Fragen zu korrekter Syntax
-
Hallo an alle,
ich versuche mich in C einzuarbeiten und habe dazu einige Fragen bzgl. der allgemeinen Syntax. Ich habe zusätzlich zu einigen Tutorials das Buch Programmieren in C von Kernighan & Ritchie. Nun, da ich während des Studiums auch Informatik hatte und zwei/drei Prog.-Sprachen in den Grundlagen lernte (C war leider nicht dabei), bin ich nicht gänzlich unbefleckt. Aber bei C habe ich so meine kleinen Probleme.1. In dem Buch von K&R wird die main -Fkt. nur mit "main()" eingeleitet. In anderen Tut`s liest man zB. "int main()" oder int main(void). Was ist nun richtig, streng nach Standard?
2. In K&R wird in den Beispielen zB. bei den Schleifen (while od. for auch if) mal nach der Initialisierung der Block in geschweiften Klammern gesetzt ({}) und mal nicht. Der Compiler (GCC) mekert ja weder bei dem einen noch bei dem anderen. Und auch hier: Was ist richtig oder "richtiger"?
Vielen Dank für die Antworten oder einen Link, wo das mal ordentlich erklärt wird.
Grüße, OEP
-
OEP schrieb:
1. In dem Buch von K&R wird die main -Fkt. nur mit "main()" eingeleitet. In anderen Tut`s liest man zB. "int main()" oder int main(void). Was ist nun richtig, streng nach Standard?
int main(void)
2. In K&R wird in den Beispielen zB. bei den Schleifen (while od. for auch if) mal nach der Initialisierung der Block in geschweiften Klammern gesetzt ({}) und mal nicht. Der Compiler (GCC) mekert ja weder bei dem einen noch bei dem anderen. Und auch hier: Was ist richtig oder "richtiger"?
Irgendworan muss der Compiler doch erkennen, was alles zum Block gehört. Und da wir hier nicht über Python reden (da erkennt der Compiler den Block an der Einrückung) brauchen wir geschweifte Klammern. Es sei denn, das if / die Schleife bezieht sich nur auf eine einzige Anweisung, dann geht's auch ohne.
-
5.1.2.2.1 Program startup
1 The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters:
int main(void) { /* ... */ }
or with two parameters (referred to here as argc and argv, though any names may be
used, as they are local to the function in which they are declared):
int main(int argc, char *argv[]) { /* ... */ }
or equivalent(9) or in some other implementation-defined manner.aus ISO/IEC 9899:TC2 Committee Draft — May 6, 2005
-
OEP schrieb:
1. In dem Buch von K&R wird die main -Fkt. nur mit "main()" eingeleitet. In anderen Tut`s liest man zB. "int main()" oder int main(void). Was ist nun richtig, streng nach Standard?
Long story short: Mach
int main (void)
(bzw.int main (int argc, char **argv)
falls Parameter übergeben werden sollen). Das ist erstmal richtig, und alles andere würde zu sehr ins Detail gehen und dich nur unnötig verwirren.OEP schrieb:
2. In K&R wird in den Beispielen zB. bei den Schleifen (while od. for auch if) mal nach der Initialisierung der Block in geschweiften Klammern gesetzt ({}) und mal nicht. Der Compiler (GCC) mekert ja weder bei dem einen noch bei dem anderen. Und auch hier: Was ist richtig oder "richtiger"?
Gibt es im Kontext von (if/for/while/etc.pp.) nur eine Anweisung, braucht man keine {}. Ansonsten ja. Ich persönlich mach die Klammern immer, und ich würde dir das auch empfehlen.
int x = 1; if (x==1) puts ("in if"); puts ("tut so als wäre es in if, ist es aber nicht");
Da stolpert man als geübter Cler zwar nicht wirklich drüber, aber als Anfänger sollte man auf Nummer sicher gehen und die paar Bytes Quellcode einfach spendieren
int x = 1; if (x==1) { puts ("in if"); puts ("auch in if"); }
edit: zu langsam && tag fail
-
Aha,
na so langsam wirds. Also wurde im Laufe der Zeit nur der Standard immer wieder angepasst oder geändert, wenn ichs richtig verstehe.Frage 2 leuchtet auch ein.
Vielen Dank!
OEP
-
Vielleicht ist das Online-Buch ja was für dich:
http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/MfG f.-th.
-
In dem Buch von K&R
Steht da "ANSI" auf dem Umschlag? Wenn nicht, ist es das ganz alte (von 1976 oder so).
Das ist zwar sehr gut, aber eben nicht mehr ganz neu...
-
f.-th. schrieb:
Vielleicht ist das Online-Buch ja was für dich:
http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/MfG f.-th.
nee, die online Edition hat grausam viele Fehler.