Why would you precede the main() function in C with a data type?

This question already has an answer here:

  • What should main() return in C and C++? 19 answers

  • The following has been valid in C89

    main() {
      return 0;
    }
    

    But in modern C (C99), this isn't allowed anymore because you need to explicitly tell the type of variables and return type of functions, so it becomes

    int main() {
      return 0;
    }
    

    Also, it's legal to omit the return 0 in modern C, so it is legal to write

    int main() {
    
    }
    

    And the behavior is as if it returned 0.

    People put void between the parentheses because it ensures proper typechecking for function calls. An empty set of parentheses in C mean that no information about the amount and type of the parameters are exposed outside of the function, and the caller has to exactly know these.

    void f();
     /* defined as  void f(int a) { } later in a different unit */
    
    int main() {
      f("foo");
    }
    

    The call to f causes undefined behavior, because the compiler can't verify the type of the argument against what f expects in the other modules. If you were to write it with void or with int , the compiler would know

    void f(int); /* only int arguments accepted! */
    
    int main(void) {
      f("foo"); /* 'char*' isn't 'int'! */
    }
    

    So for main it's just a good habit to put void there since it's good to do it elsewhere. In C you are allowed to recursively call main in which case such differences may even matter.

    Sadly, only a few compilers support modern C, so on many C compilers you may still get warnings for using modern C features.

    Also, you may see programs to declare main to return different things than int . Such programs can do that if they use a freestanding C implementation. Such C implementations do not impose any restrictions on main since they don't even know or require such a function in the first place. But to have a common and portable interface to the program's entry point, the C specification requires strictly conforming programs to declare main with return type int , and require hosted C implementations to accept such programs.


    The main function returns an integer status code that tells the operating system whether the program exited successfully.
    return 0 indicates success; returning any other value indicates failure.

    Since this is an integer and not a string, it returns int , not char or char* . (Calling printf does not have anything to do with returning from the function)

    Older versions of C allow a default return type of int .
    However, it's better to explicitly specify the return type.

    In C (unlike C++), a function that doesn't take any parameters is declared as int myFunc(void)


    It's called an exit status . When the program finishes, you want to let the callee know how your program exited. If it exited normally, you'll return 0 , etc.

    Here's where you can learn more about exit statuses.

    链接地址: http://www.djcxy.com/p/12516.html

    上一篇: 写C主要功能

    下一篇: 你为什么要在C语言的main()函数中加上数据类型?