int main() oder void main()?

  • aus dem C99 Final Draft: Program startup
    The function called at program startup is named main. The implementation declares no
    prototype for this function. It shall be defined with a return type of int and with no
    int main(void) { /* ... */ }
    or with two parameters (referred to here as argc and argv, though any names may be
    used, as they are local to the function in which they are declared):
    int main(int argc, char *argv[]) { /* ... */ }
    or equivalent;8) or in some other implementation-defined manner.
    If they are declared, the parameters to the main function shall obey the following
    — The value of argc shall be nonnegative.
    — argv[argc] shall be a null pointer.
    — If the value of argc is greater than zero, the array members argv[0] through
    argv[argc-1] inclusive shall contain pointers to strings, which are given
    implementation-defined values by the host environment prior to program startup. The
    intent is to supply to the program information determined prior to program startup
    from elsewhere in the hosted environment. If the host environment is not capable of
    supplying strings with letters in both uppercase and lowercase, the implementation
    shall ensure that the strings are received in lowercase.
    — If the value of argc is greater than zero, the string pointed to by argv[0]
    represents the program name; argv[0][0] shall be the null character if the
    program name is not available from the host environment. If the value of argc is
    greater than one, the strings pointed to by argv[1] through argv[argc-1]
    represent the program parameters.
    — The parameters argc and argv and the strings pointed to by the argv array shall
    be modifiable by the program, and retain their last-stored values between program
    startup and program termination.

    Das bedeutet dass void main() absolut illegal ist!

    main darf nur folgendermassen aussehen:

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

    bzw. andere Parameter - das ist dann aber implementation defined und sollte NICHT verwendet werden.

    Der Standard verbietet 'void main()' nicht explizit, aber ein standardkonformer Compiler darf bei 'void main()' undefiniertes verhalten an den Tag legen.

    [ Dieser Beitrag wurde am 11.04.2002 um 14:12 Uhr von Shade Of Mine editiert. ]

Log in to reply