wieso kein void main () ?
-
Manche Compiler liefern als Rückgabewert immer 0, wenn man 'void main()' verwendet.
-
Andere erzeugen Programme, die ständig Core-Dumps setzten. BTW:
/* hier nix */ int main; /* hier nix */
wird hier übrigens auch übersetzt.
-
Überleg dir mal du schrteibst ein Programm mit einer inetrnen Funktion vom Typ void.
du rufst diese Funktion auf und sie soll etwas verändern, was aber nicht unbedingt klappen muss. von Main kannst du den erfolg nicht prüfen, weil es villeicht zu umständlich ist. Also MUSS die Funktion main informieren ob die operation geglückt ist, denn falls nicht könnte das Programm villeicht abstürzen.
genauso ist es beim OS<->Programm. Dein Programm verändert irgendetwas, was kritisch für das gesamte system ist, klappt dies nicht, so muss es repariert werden, weil sonnst das OS crashed. hat das Programm keinen return wert, so weis sdas oS nicht ob etwas schief gelaufen ist oder alles ok ist. fall 1 wäre fatal, bei fall 2 läuft alles korrekt weiter, aber das verhalten ist undefiniert.PS: hoffe das war einigermaßen nachvolziehbar ^^
[ Dieser Beitrag wurde am 06.07.2003 um 16:02 Uhr von THE_FreaK editiert. ]
-
Original erstellt von <Hendrik>:
**@PhoenixAber mit
void main () { ... }
klappts doch auch.
Was heißt das OS weiß nicht was es machen soll ?
Bei void wird doch gar kein Rückgabewert erwartet.**
Ja, aber dem Aufrufer ist egal, wie das Programm erstellt wurde, es will vom OS im zweifelsfall einen Rückgabewert haben. Und das OS kann dann entweder sowas wie 0 zurückgeben oder einfach das nehmen, was gerade im Rückgaberegister rumliegt, meistens Salat. Beides ist hässliches Verhalten, beim ersten denkt der Aufrufer, dass das Programm ordnungsgemäß durchgelaufen ist, was aber nicht so sien muss, beim zweiten weiß der Aufrufer nicht, ob es nun korrekt durchgelaufen ist oder nicht. Deswegen schreibt der Standard vor, int als Typ von main zu nehmen, dmait solcher mist nicht passiert.
-
Aber liefert denn
int main () { ... }
nicht 0 als default zurück wenn ich
return 0;
gar nicht selbst ins Programm schreibe ?
Oder liefert es automatisch nicht 0 wenn was schief gelaufen ist ?
Undwas ist OS
Danke für die vielen Antworten !
-
Wenn Du nichts reinschreibst wird automatisch 0 zurückgegeben.
Im Fehlerfall solltest Du aber was anderes zurückgeben, z.B. 1
Mit OS ist das Betriebssystem gemeint (englisch von Operating System).
-
$ cat test.c int main() {} $ gcc -std=c99 -W -Wall -pedantic test.c && ./a.out $ echo $? 0
Also der gcc kompiliert es selbst im Standard-Modus, und liefert in dem Fall den Wert 0 zurueck. Scheint also standardkomform zu sein (muesste ich zuhause nachlesen)
-
Steh definitiv im Standard drin. Kann die Nummer halt nicht auswenig, aber hab's schon gelesen.
-
IMHO gibt es keinen wirklichen Grund, void main zu verbieten. Es gibt genug Compiler, die das sinnvoll übersetzen, es gibt haufenweise Programme, die keinen sinnvollen Exit-Status haben, bei int main wird, wenn nichts anderes gesagt ist, automatisch 0 zurückgegeben. Es würde nichts kaputtmachen, wenn man void main zulassen würde.
(solang es nicht erlaubt ist schreibt man natürlich brav int main)
-
ist aber kein C Standard! Sondern C++!
dort steht es in 3.6.1
If control reaches the end of main without encountering a return statement, the effect is that of executing return 0;
-
Ist doch C-Standard. 5.1.2.2.3: «reaching the } that terminates the main function returns a value of 0.»
-
Original erstellt von Bashar:
**IMHO gibt es keinen wirklichen Grund, void main zu verbieten. Es gibt genug Compiler, die das sinnvoll übersetzen, es gibt haufenweise Programme, die keinen sinnvollen Exit-Status haben, bei int main wird, wenn nichts anderes gesagt ist, automatisch 0 zurückgegeben. Es würde nichts kaputtmachen, wenn man void main zulassen würde.(solang es nicht erlaubt ist schreibt man natürlich brav int main)**
Dass es viele Porgramme gibt, die diese schlechte Angewohnheit haben und Compiler die auch noch drüber wegsehen, heißt ja noch lange nicht, dass man es fördern muss. Ich shcätze spätestens, wenn man so ein "kaputtes" Programm z.B. in einem Makefile benutzt, bekommt man hässliche Ergebnisse. (Und wer weiß schon ob sowas dann doch mal passiert...)
[ Dieser Beitrag wurde am 07.07.2003 um 13:23 Uhr von TriPhoenix editiert. ]
-
Wieso kaputt? Man müßte natürlich definieren, dass ein Programm mit void main in einem hosted environment eine 0 an selbiges zurückgibt.
-
In einem "hosted environment" ist eh _nichts_ für die Startfunktion vorgeschrieben - da kann man auch DWORD WINAPI WinMain(blah...) schreiben.
-
Du verwechselst freestanding und hosted.
-
Hallo,
man stelle sich mal vor der C++ Standard würde in der nächsten Version void main erlauben. Chaos, Verwirrung, Depression -> Massensterben. Ne. void main muss verboten bleiben.
Worüber sollen Leute wie ich sonst z.B. ihre C++ FAQs schreiben?
-
Original erstellt von HumeSikkins:
Worüber sollen Leute wie ich sonst z.B. ihre C++ FAQs schreiben?mhm... daruber warum auch void main() erlaubt ist :p
-
na wenn void main das einzige Problem von C++ ist, dann ist ja alles klar
-
na wenn void main das einzige Problem von C++ ist, dann ist ja alles klar
Ne. Keine Sorge.
Wir haben die Probleme von C++ auf dem Forumtreffen diskutiert. Und ich bin mir ganz sicher, dass am Ende mehr als ein Punkt auf der Liste stand
-
Original erstellt von HumeSikkins:
Wir haben die Probleme von C++ auf dem Forumtreffen diskutiert. Und ich bin mir ganz sicher, dass am Ende mehr als ein Punkt auf der Liste standzeig mal die Liste