主要不能无效

时间:2010-09-30 13:53:39

标签: c++ syntax

  

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

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

4 个答案:

答案 0 :(得分:11)

因为main()的退货类型(由标准规定)必须为int

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

  

实现不应预定义主函数。此功能不应过载。 它的返回类型为int ,但其类型是实现定义的。

答案 1 :(得分:9)

回答 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

答案 2 :(得分:4)

因为标准说它返回int。

答案 3 :(得分:1)

某些操作系统期望从进程中获得整数返回值。声明main返回一个int。如果您不关心该值,只需返回0。

来自comp.lang.c FAQ: