【问题标题】:main can't be void [duplicate]main 不能为空 [重复]
【发布时间】:2010-09-30 13:53:38
【问题描述】:

可能重复:
does c++ standard prohibit the void main() prototype?

为什么 C++ 不让我做void main()?这不是什么大问题,但我仍然很好奇。

【问题讨论】:

  • int void() { return 0;} 有什么问题; ?
  • 同 [c++ 标准是否禁止 void main() 原型? ](stackoverflow.com/questions/1915659/…)。
  • 更好的问题是你为什么使用bloodshed c++ ;)
  • 你为什么要做void main()? 不是void,是int。就是这样。您甚至不会注意到差异,因为无论如何您都不需要明确的返回值。
  • @Max: 它是唯一一个可以省略 return 语句的非 void return 函数!所以int main(){} 更短了一个字符!

标签: c++ syntax


【解决方案1】:

因为main()(按照标准规定)的返回类型必须是int

C++03 [Section 3.6.1主函数]

实现不应预定义主要功能。该功能不得重载。 它的返回类型应该是 int 类型,否则它的类型是实现定义的。

【讨论】:

    【解决方案2】:

    Stroustrup本人的回答:

    我可以写“void main()”吗? 定义

    void main() { /* ... */ }
    

    不是而且从来不是 C++,甚至也不是 C。请参阅 ISO C++ 标准 3.6.1[2] 或 ISO C 标准 5.1.2.2.1。符合要求的实现接受

    int main() { /* ... */ }
    

    和

    int main(int argc, char* argv[]) { /* ... */ }
    

    一个符合要求的实现可以提供更多版本的 main(),但它们都必须有返回类型 int。 main() 返回的 int 是程序向调用它的“系统”返回值的一种方式。在不提供此类工具的系统上,返回值被忽略,但这不会使“void main()”合法 C++ 或合法 C。即使您的编译器接受“void main()”,也要避免它,否则会冒险被 C 和 C++ 程序员认为是无知的。

    在 C++ 中,main() 不需要包含显式的 return 语句。在这种情况下,返回值为 0,表示执行成功。例如:

    #include<iostream>
    
    int main()
    {
        std::cout << "This program returns the integer value 0\n";
    }
    

    还请注意,ISO C++ 和 C99 都不允许您将类型排除在声明之外。也就是说,与 C89 和 ARM C++ 相比,在声明中缺少类型的情况下不假定“int”。因此:

    #include<iostream>
    
    main() { /* ... */ }
    

    是一个错误,因为缺少 main() 的返回类型。

    来源:http://www2.research.att.com/~bs/bs_faq2.html#void-main

    【讨论】:

      【解决方案3】:

      因为标准说它返回 int。

      【讨论】:

        【解决方案4】:

        一些操作系统期望进程返回一个完整的值。声明 main 返回一个 int。如果您不关心值,只需返回 0。

        来自 comp.lang.c 常见问题解答:

        【讨论】:

        • 你甚至不需要明确地返回任何东西。
        猜你喜欢
        • 2017-07-13
        • 2018-09-11
        • 2014-07-07
        • 1970-01-01
        • 2015-01-28
        • 1970-01-01
        • 1970-01-01
        • 2019-11-29
        • 2018-04-09
        相关资源
        最近更新 更多