你能省略main函数中的返回类型吗?

Mar*_*dik 19 c++

关于main功能的声明是否有一些特殊规则?

根据ideone,这是合法的C++:

main()  // As opposed to int main()
{
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

另一方面,正常函数似乎没有权限避免返回类型:

f(){} 

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

给出错误:

prog.cpp:1:3:错误:ISO C++禁止声明'f'没有类型[-fpermissive] f(){} ^

main这种情况下功能是否特别?

Vit*_*meo 19

永远不要省略main返回类型,因为它不标准!


wandbox示例:

prog.cc:1:6:警告:ISO C++禁止声明'main'没有类型[-Wpedantic] main()


从$ 3.6.1起:

1程序应包含一个名为main的全局函数,它是程序的指定开始.实现定义是否需要独立环境中的程序来定义主函数.[注意:在独立环境中,启动和终止是实现定义的; startup包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行; 终止包含具有静态存储持续时间的对象的析构函数的执行. - 尾注]§3.6.158

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


And*_*ski 11

不,它有效,因为编译器支持真正的旧C,允许这样做.

  • 它确实回答了问题,答案是"不".唯一的原因是"它起作用,因为编译器支持真正的旧C,允许这样做." (2认同)

Pet*_*ter 7

意思是错的.

较旧版本的C(pre-standard和1989标准)支持int函数的隐式返回类型.自1999年标准以来,它在C中是非法的.

没有C++标准支持隐式int返回类型.实际上,隐含int在ARM中被"禁止"(Margaret Ellis和Bjarne Stroustrup的The Annotated C++ Reference Manual).ARM是指导第一个C++标准开发的关键文档之一.