Programmieranfänger will 3D Spiele programmieren


dece said:
Jetzt eine kleine Frage am Rande:
[...] return 0; //muss man in C schreiben.., und kann eigentlich Standartmässig nur in C++ weggelassen werden

Kann sein, dass Visual C das nicht unterstützt, aber man darf es weglassen. Zitat aus dem Standard:
"reaching the } that terminates the main function returns a value of 0."
 
kann das sein das du das aus dem ANSI c++ standart kopiert hast?
Weil, ich bin mir ziemlich sicher, dass im Iso C standart eine return 0 Anweisung haben muss (obwohl inzwischen jeder compiler den am schluss automatisch hinzufügt wird)
 
Ne, aus dem Standard für C99. Hier ist die aktuellste Version: http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf, der betreffende Absatz ist 5.1.2.2.3. In C90 wurde ein return meines Wissens noch verlangt.
 
Wenn die Funktion int als Rückgabewert hat, ist die return-Anweisung, ganz unabhängig vom verwendeten C-Standard, erforderlich. Die main()-Funktion muss sowohl in C90 als auch in C99 int als Rückgabewert haben. Viele Compiler übersetzen ein Programm zwar auch, wenn der Rückgabewert void ist, das gibt aber mindestens eine Warnung und das auch aus gutem Grund. Ebenso wie das Weglassen der return-Anweisung bei einer nicht-void-Funktion. Wird die return-Anweisung bei main() weggelassen, wird das zwar compiliert, erzeugt aber auch hier in der Regel eine Warnung. Dann wird implizit 0 als Rückgabewert angenommen. Saubere Programmierung ist aber etwas anderes.
Wird bei einer Funktion gar kein Rückgabewert angegeben, wird nicht void, sondern int angenommen. Das liegt daran, dass das beim alten K&R-C der Fall war und so die Kompatibilität mit altem Code gewahrt wird. Aber auch das sollte bei einem halbwegs modernen Compiler eine Warnung verursachen.
 
Lies mal die betreffende Stelle im verlinkten Standard, da steht eindeutig, dass main 0 zurückgibt wenn kein return angegeben wird. Klar ist es sauberer das return anzugeben, aber zumindest bei main ist das Weglassen erlaubt. Bei anderen Funktionen ist es nicht erlaubt, aber die meisten Compiler sind so "nett" nur eine Warnung auszugeben. Dass bei nicht-deklariertem Typ einer Funktion int angenommen wird ist auch eine "Nettigkeit" der Compiler aus Gründen der Kompatibilität. In C99 muss ein Typ zwingend angegeben werden.
 
Unabhängig von C-Standards (kann leider kein C) sollte doch jedes Programm (int) zurückgeben. Das Weglassen des Return-Wertes der main() Funktion kann in unerwartetem Verhalten beim Verketten von Programmen, z.Bsp. über && oder ||, resultieren, da ein Return-Wert von 0 bedeutet, dass das Programm fehlerfrei seine Funktion erfüllt hat.
 
Klaus said:
Lies mal die betreffende Stelle im verlinkten Standard, da steht eindeutig, dass main 0 zurückgibt wenn kein return angegeben wird. Klar ist es sauberer das return anzugeben, aber zumindest bei main ist das Weglassen erlaubt. Bei anderen Funktionen ist es nicht erlaubt, aber die meisten Compiler sind so "nett" nur eine Warnung auszugeben. Dass bei nicht-deklariertem Typ einer Funktion int angenommen wird ist auch eine "Nettigkeit" der Compiler aus Gründen der Kompatibilität. In C99 muss ein Typ zwingend angegeben werden.
Natürlich ist das eine Nettigkeit des Compilers. Man sollte ohnehin nicht implizit Dinge annehmen, die nicht offensichtlich sind.
Das mit dem main und dem weggelassenen return ist so eine Sache. Dass es im Standard erwähnt ist, dass implizit 0 zurückgegeben werden soll, stimmt zwar, aber viele moderne Compiler (einschließlich dem doch sehr verbreiteten GCC) geben eine Warnung aus, wenn man das return in der main-Funktion weglässt. Daher würde ich das nicht so interpretieren, dass es so gewollt ist, dass man das return auslässt.

EDIT: Ich muss mich korrigieren. Wenn man bei aktuellen GCC C99 angibt, erhält man doch keine Warnung wenn bei der main()-Funktion das return weggelassen wird, nur bei C89. Das hatte ich wohl falsch in Erinnerung. Ich würde es trotzdem nicht weglassen. ;)
HolySmoke said:
Unabhängig von C-Standards (kann leider kein C) sollte doch jedes Programm (int) zurückgeben. Das Weglassen des Return-Wertes der main() Funktion kann in unerwartetem Verhalten beim Verketten von Programmen, z.Bsp. über && oder ||, resultieren, da ein Return-Wert von 0 bedeutet, dass das Programm fehlerfrei seine Funktion erfüllt hat.
Völlig richtig. Genau das ist ja auch der Grund, wieso die main()-Mehtode immer "int" als Rückgabewert hat und nie "void". Wenn man das return weglässt, fügt der Compiler implizit ein "return 0" ein.
 
mein tipp ist programmier erstmal für pc, danach kannst du dann ja immer noch schauen, ob du was für die Pandora entwickeln willst, denn es ist für PC am leichtesten etwas zu schreiben, gleich mit cross compiling anzufangen halte ich für sehr gewagt. Mein tipp wäre www.processing.org ist leicht, und du kannst damit auch 3D Programmieren. Und wer weiß, vieleicht wird processing ja irgendwann auch auf der Pandora möglich sein, denn alle voraussetzungen dafür sind gegeben.
 
Back
Top