compiler /codeunterschied? main()

  • compiler /codeunterschied? main()

    Hallo Leute!

    Habe vor kurzem begonnen mit c++ zu programmieren, aber kenne mich leider nicht aus wieso bei einem compiler eins funzt und beim anderen wiederum nicht :(

    Habe Dev-C++ installiert und diesen code kompiliert:

    Quellcode

    1. #include <iostream>
    2. using namespace std;
    3. int main()
    4. {
    5. std::cout << "hello";
    6. system("PAUSE");
    7. }


    und wenn ich die funktion int in void umändere, dann bekomme ich eine Fehlermeldung, aber beim DOS-Compiler von Borland funktioniert es wunderbar. Woran liegt es ? Gibt es einen bestimmten Compiler wo alles funktioniert ?


    Edit:
    oder wenn ich

    Quellcode

    1. #include <iostream>
    in

    Quellcode

    1. #include "iostream.h"
    umändere.

    lg
  • hi,

    eine gute frage.. habe ich gerade selber mal gegoogelt..

    Im C++-Standard steht eindeutig, dass der Rückgabewert der main-Funktion INTEGER ist. Doch haben sich die Compilerhersteller offensichtlich geeinigt, auch VOID zuzulassen.
    da die main funktion meist keinen rückgabewert hat wird ziemlich oft VOID verwendet, was ja eigentlich für funktionen ohne rückgabewert ganz logisch ist, sich jedoch nicht an den Standard hält

    hier die standardfunktion

    Quellcode

    1. int main ( int argc, char *argv[] );
    2. int main ();
  • Hallo,
    wollte nur noch kurz anmerken, dass es strenggenommen durchaus einen Unterschied macht, denn main ist eine Funktion wie jede andere auch nur, dass diese von der Laufzeitumgebung aufgerufen wird. Da letztere automatisch vom Compiler erstellt wird, ist es natürlich von selbigem abhängig, für welches "Format" (a.k.a. Signatur) der main-Funktion er den Aufruf generiert. Normalerweise liefert main einen int-Wert an die Laufzeitumgebung zurück um damit signalisieren zu können, ob bei der Ausführung des Programms alles glatt gelaufen ist oder nicht. Eine konkretes Beispiel ist hier die errno Variable in (M$)DOS-Batchfiles, welcher dieser Rückgabewert zugewisen wird und es so ermöglicht im bat-script darauf reagieren zu können. Worauf diese also in der void-Version von main steht, hängt von deinem Compiler ab - normalerweise 0 (unter M$ -1, glaub ich) - also alles klar soweit, selbst wenn das Programm mit Pauken und Trompeten abgeraucht ist ;)
    Lange Rede, kurzer Sinn: Würde immer empfehlen, die Version

    Quellcode

    1. int main( int argc, char **argv )

    zu verwenden - du bist Standardkonform und bekommst keine Fehlermeldung, egal mit welchem Compiler (wenn doch, ists vielleicht doch kein C/C++-Compiler ;)).

    Zur zweiten Frage: Der Unterschied zwischen den beiden includes ist, dass iostream.h (normalerweise) ein

    Quellcode

    1. #include <iostream>
    und einige vordefinierte

    Quellcode

    1. using ...;
    enthält. Da das allerdings nicht von allen Compilern gleich umgesetzt wird, gibts hier z.T. sehr nervige Unterschiede. Weiss noch, des hat mich seinerzeit auch mal sehr verwirrt!

    grüße.