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

这个问题在这里已经有了答案:

  • main()应该在C和C ++中返回什么? 19个答案

  • 以下在C89中有效

    main() {
      return 0;
    }
    

    但在现代C(C99)中,这是不允许的,因为你需要明确地告诉变量的类型和函数的返回类型,所以它变成了

    int main() {
      return 0;
    }
    

    此外,在现代C中省略return 0是合法的,因此写法是合法的

    int main() {
    
    }
    

    行为就好像它返回0。

    人们把void的括号内,因为它确保函数调用正确的类型检查。 C中的一组空括号表示没有关于参数的数量和类型的信息暴露在函数之外,并且调用者必须完全知道这些。

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

    f的调用会导致未定义的行为,因为编译器无法验证参数的类型是否符合f在其他模块中的要求。 如果你用void或者int来编写它,编译器就会知道

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

    所以对于main来说,把void放在那里是一个好习惯,因为在其他地方做它很好。 在C中,您可以递归调用main在这种情况下,这些差异甚至可能很重要。

    可悲的是,只有少数编译器支持现代C语言,因此在许多C编译器中,您仍然可能会因使用现代C语言功能而受到警告。

    此外,您可能会看到程序声明main返回的内容不是int 。 如果他们使用独立的C实现,这样的程序可以做到这一点。 这样的C实现对main没有任何限制,因为他们甚至不知道或需要这样的功能。 但是为了使程序的入口点具有通用和可移植的接口,C规范要求严格符合程序来声明返回类型为int main,并要求托管C实现接受这些程序。


    main函数返回一个整数状态码,告诉操作系统程序是否成功退出。
    return 0表示成功; 返回任何其他值表示失败。

    由于这是一个整数,而不是一个字符串,因此它会返回int ,而不是charchar* 。 (调用printf与从函数返回没有任何关系)

    C的老版本允许int的默认返回类型。
    但是,最好明确指定返回类型。

    在C中(与C ++不同),不带任何参数的函数被声明为int myFunc(void)


    这叫做退出状态 。 当程序结束时,你想让被调用者知道你的程序如何退出。 如果它正常退出,您将返回0等。

    您可以在这里了解更多关于退出状态的信息。

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

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

    下一篇: Cannot modify C string