主要不能无效

cal*_*pto 5 c++ syntax

可能重复:
c ++标准是否禁止void main()原型?

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

Pra*_*rav 11

因为返回类型main()(由标准规定)必须int

C++ 03 [ Section 3.6.1 主要功能]

实现不应预定义主函数.此功能不应过载. 它应该具有int类型的返回类型,否则其类型是实现定义的.


She*_*per 9

来自Stroustrup的回答:

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

void main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

是不是也从来都不是C++,甚至也不是C.参见ISO C++标准3.6.1 [2]或ISO C标准5.1.2.2.1.符合要求的实施接受

int main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

int main(int argc, char* argv[]) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

一致的实现可能提供更多版本的main(),但它们都必须具有返回类型int.main()返回的int是程序将值返回给调用它的"系统"的一种方式.在系统中不提供这样的设施的返回值被忽略,但是,这并不使"无效的主要()"法律C++或法律C.即使你的编译器接受"无效的主要()"避免它,或者风险被C和C++程序员认为是无知的.

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

#include<iostream>

int main()
{
    std::cout << "This program returns the integer value 0\n";
}
Run Code Online (Sandbox Code Playgroud)

另请注意,ISO C++和C99都不允许您将类型保留在声明之外.也就是说,与C89和ARM C++相反,假设声明中缺少某个类型,则不假定为"int".所以:

#include<iostream>

main() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

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

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