PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : main (Anfänger)



infostud
11.10.2004, 21:12
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ß

Felix G
11.10.2004, 21:26
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

11.10.2004, 21:29
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
}

Felix G
11.10.2004, 22:02
*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.

Blackbird
12.10.2004, 06:19
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:



int main (void)
{
return 0;
}


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:



#include <stdio.h>

int main (void)
{
return (printf ("Hello world"));
}


printf gibt einen int zurück, die Anzahl der Zeichen, die auf stdout ausgegeben wurden.
Einrückungen und Zeilenorientierungen sind "Geschmacksache".


Blackbird

12.10.2004, 07:33
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.

D.Stolarek
12.10.2004, 08:04
hmm wieso soll
void main() falsch sein
in c wirds doch fast immer verwendet und es funktioniert doch ohne fehler?
*verwirrtbin*

Blackbird
12.10.2004, 11:13
@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

Felix G
12.10.2004, 13:55
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.

10.12.2004, 13:22
wie bekomme ich werte, die in
int main(int argc, char argv)
werte Übergeben, die ich nachher ausgeben kann?

PicNick
10.12.2004, 13:47
Das ganze ist relevant für programme, die von irgendeiner Shell aufgerufen werden (DOS/Unix...)
die shell übergibt diese argv-Werte beim Aufruf, und der Returnwerte ist als Benachrrichtigung zu sehen, wie das ganze ausgegangen ist (z.B 0== ok, 1==fehler)
Beispiel Dos-Fenster
c:\>test.exe du bist ein programmierer

test.c

int main(int argc, char **argv)
{
int iX;
for (iX = 0; iX < argc; iX++)
printf("%02.2d : \"%s\"\n", iX, (char*)argv[iX]);

return (0); // success !
}

mfg robert

pS: wie du siehst, ist das erste argument immer der name des programmes selbst