die korrekte vollständige Schreibweise lautet: int main(int argc, char* argv[])
int main() geht auch noch
void main() ist eigentlich falsch
edit:
und ob man jetzt main() oder main(void) schreibt ist relativ egal
Hallo
also es ist schon etwas irritierend für einen Anfänger.
In manchen C-Büchern wird nur main() benutzt, einige benutzen void main(), und wieder andere bevorzugen int main(void)...
Gibt es noch mehr Variationen?????
Wenn ja, welche???
Kann mir jemand deren Bedeutung erklären??
Habe es leider nicht verstanden
Gruß
die korrekte vollständige Schreibweise lautet: int main(int argc, char* argv[])
int main() geht auch noch
void main() ist eigentlich falsch
edit:
und ob man jetzt main() oder main(void) schreibt ist relativ egal
So viele Treppen und so wenig Zeit!
In einem avrgcc-Programm einfach
int main (void) {
//some stuff
}
return 0 oder ähnliches kannst du dir schenken, das fügt der Compiler ein. Im Normalfall bleibt dein Programm eh irgendwo in einer Endlosschleife hängen.
for (; {
//do something
}
oder
while (1) {
//do something
}
*verlässtfluchtartigdenraum*
WAAAAAAAAAAHHHHHHHHHHHH!!!!!!!
*kommtetwasblassaberberuhigtzurück*
Also,
es stimmt zwar, daß die meisten Compiler es nicht so genau nehmen...
aber ich glaube manchmal wäre es, schon aus erzieherischen Gründen, besser wenn sie es täten.
Man sollte grundsätzlich immer darauf achten, korrekt zu programmieren.
Denn wenn man dann irgendwann, warum auch immer, ein fertiges Programm mit einem anderen Compiler kompilieren muss, kann man sich sicher sein daß es funktionieren wird.
So viele Treppen und so wenig Zeit!
Kann mich @Felix G mit meiner Meinung nur anschließen:
Bei int main () MUß return 0; (oder eine andere integer-Zahl oder Ausdruck) beim Verlassen der main-Funktion stehen. Denn der Rückgabewert der main-Funktion ist int!
Das korrekte, einfachste Programm wäre demnach:
Statt der 0 könnte auch eine beliebige Funktion stehen, die ebenfalls einen int als Rückgabewert hat. Als Abwandlung zum bekannten "Hello world" kann man das dann so schreiben:Code:int main (void) { return 0; }
printf gibt einen int zurück, die Anzahl der Zeichen, die auf stdout ausgegeben wurden.Code:#include <stdio.h> int main (void) { return (printf ("Hello world")); }
Einrückungen und Zeilenorientierungen sind "Geschmacksache".
Blackbird
Da es mir Jörg Wunsch so gesagt hat (welcher einer der Urheber von avr-gcc ist), werde ich meine Methodik trotzdem beibehalten. Ich hatte auf mikrocontroller.net einmal ein rein interruptbasiertes Programm reingestellt, und dort wurde mir gesagt, dass ich mir Endlosschleife und return 0 schenken kann. Ist in meinen Augen auch irgendwo logisch, denn welche Funktion soll denn das return der main () auswerten? Endlosschleife und return werden vom Compiler selbständig eingefügt.
hmm wieso soll
void main() falsch sein
in c wirds doch fast immer verwendet und es funktioniert doch ohne fehler?
*verwirrtbin*
---
@D.Stolarek:
http://www.c-plusplus.de/forum/viewtopic.php?t=39346
@Gast:
Es geht um portablen Code nach ANSI-Standard. Wenn avr-gcc sich nicht daran hält, ist es noch lange kein Grund, es nur so zu machen.
Wie Du es machts, ist völlig egal, in Deinem Falle aber falsch.
Blackbird
eben...
die meisten Compiler halten sich nicht genau an den Standard, und akzeptieren Code der eigentlich nicht korrekt ist.
Das hat mit dazu beigetragen, daß viele Leute einfach falsch programmieren.
Denn wenn man C lernt, und man erfährt alles mögliche über Funktionen, Rückgabewerte etc.
dann fällt es anfangs vielleicht schwer zu verstehen warum auch main einen Rückgabewert hat.
Also wird das einfach unter den Tisch gekehrt, und fast jedes Buch, oder jeder Lehrer fängt einfach mit void main() an.
Denn es funktioniert ja...
Der Compiler frisst den Code, die meisten geben nichtmal eine Warnung aus.
Aber wie gesagt...
Darauf kann man sich nicht verlassen.
Man lernt ja nicht "C für gcc" oder "C++ für Visual C++"...
man lernt C bzw. C++ allgemeingültig für jeden beliebigen standardkonformen Compiler.
So viele Treppen und so wenig Zeit!
wie bekomme ich werte, die in
int main(int argc, char argv)
werte Übergeben, die ich nachher ausgeben kann?
Lesezeichen