Unterschiede C und C++ in Bezug auf main()



  • Ich habe ein paar Fragen, die ihr mir hoffentlich beantworten könnt. Sie beziehen sich alle auf den jeweiligen ANSI/ISO Standard.

    1.) In C++ kann ich das return in der main() Methode weglassen, in C ist es Pflicht?

    2.) Sowohl

    int main()
    

    , wie auch

    int main(int, char**)
    

    sind C und C++ standardkonform?

    3.)

    int main(int, char**, char**)
    

    gehört nicht zum Standard und ist nur unter POSIX Systemen verfügbar?



  • 1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)

    2. Ja (die obere Version ignoriert Kommandozeilen-Parameter, bei der unteren kannst du über argc/argv auf die Parameterliste zugreifen)

    3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).



  • CStoll schrieb:

    1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)

    Jap, kann man.

    3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).

    So ist es auch.

    MfG

    GPC



  • GPC schrieb:

    3. Es ist auf jeden Fall eine nichtportable Erweiterung, allerdings weiß ich nicht, wer sie eingeführt hat - und wer sie unterstützt (der dritte Parameter dürfte die Environment-Variablen enthalten).

    So ist es auch.

    Das ist POSIX, also UNIX und Linux z.B.?! 😕

    Gut zu wissen, ich dachte immer das stammte von MS, denn die MS-Compiler können es auf jeden Fall:

    MSDN schrieb:


    {
    program-statements
    }

    Microsoft Specific —>

    envp

    A pointer to an array of environment strings. It can be declared as an array of pointers to char (char *envp[ ]) or as a pointer to pointers to char (char **envp). If your program uses wmain instead of main, use the wchar_t data type instead of char. The end of the array is indicated by a NULL pointer. The environment block passed to main and wmain is a “frozen„ copy of the current environment. If you subsequently change the environment via a call to putenv or _wputenv, the current environment (as returned by getenv/_wgetenv and the _environ/ _wenviron variable) will change, but the block pointed to by envp will not change. This argument is ANSI compatible in C, but not in C++.

    END Microsoft Specific



  • GPC schrieb:

    CStoll schrieb:

    1. Afaik kann man es in C auch weglassen (aber nagel mich nicht darauf fest)

    Jap, kann man.

    Aber erst ab C99, bei C90 war das return noch zwingend vorgeschrieben.



  • Sgt. Nukem schrieb:

    Das ist POSIX, also UNIX und Linux z.B.?! 😕

    Mein "So ist es auch" bezog sich auf die Funktion des Parameters als Environment-Variable. Wer sie eingeführt hat, keine Ahnung.
    Dein Link legt aber nahe, dass es MS war.

    MfG

    GPC



  • Das Zitat legt eher nahe, dass es in ANSI C legal ist. 🙂

    Sgt. Nukem schrieb:

    MSDN schrieb:

    This argument is ANSI compatible in C, but not in C++.



  • kingruedi schrieb:

    Das Zitat legt eher nahe, dass es in ANSI C legal ist. 🙂

    Sgt. Nukem schrieb:

    MSDN schrieb:

    This argument is ANSI compatible in C, but not in C++.

    irgendwie läuft's zur Zeit nicht... 😞


Anmelden zum Antworten