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

Can you omit the return type in main function?

本文关键字:返回类型 中省 函数 main      更新时间:2023-10-16

对于main函数的声明有什么特殊的规则吗?

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

main()  // As opposed to int main()
{
   return 0;
}
另一方面,普通函数似乎没有特权避免返回类型:
f(){} 
int main()
{
    return 0;
}

给出错误:

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

在这种情况下main函数是否特殊?

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


wandbox示例:

掠夺。cc:1:6:警告:ISO c++禁止声明没有类型的'main' [-Wpedantic]main ()


从$ 3.6.1:

1程序应该包含一个名为main的全局函数,它是程序的指定起始点。它独立环境中的程序是否需要定义main函数。[注:在独立环境中,启动和终止是由实现定义的;启动包含具有静态存储持续时间的命名空间范围的对象的构造函数的执行;终止包含对具有静态存储持续时间的对象执行析构函数。-尾注]§3.6.1 58

2实现不应该预定义main函数。此函数不得重载。应当返回类型为int,但其类型为实现定义的

不,它可以工作,因为编译器支持非常旧的C语言,这允许。

ideone错了。

旧版本的C(预标准和1989标准)支持函数的隐式int返回类型。自1999年标准以来,这在C语言是非法的。

没有c++标准支持隐式的int返回类型。事实上,隐式的int在ARM中被"禁止"(Margaret Ellis和Bjarne Stroustrup编写的注释c++参考手册)。ARM是指导第一个c++标准开发的关键文档之一。

在c++中,除了一些老的c++编译器(如Turbo c++)之外,它是无效的。每个函数都应该在c++中指定返回类型。

参见参考链接:http://www.geeksforgeeks.org/implicit-return-type-int-c-language/

对于旧的C,它背后有逻辑支持-当main()终止时,它显式返回0,意味着程序成功。main返回的int值通常是将要传递给操作系统的值。

标准规定了宿主实现应该如何处理"main"返回"int"的程序。它没有明确指定当"main"返回时实现应该做什么,但它强烈暗示,当"main"返回零时,实现应该做底层平台"正常"的事情。它没有规定实现应该如何处理"main"返回其他内容的程序;实现可以自由地选择有用或无用的行为。

独立实现允许指定"main"必须永远不返回,并且如果它返回可能会发生任意的坏事情。该标准没有规定任何特定的替代调用形式,但暗示实现可以有效地支持这些形式。在某些平台上,通过代码调用"void"函数,期望它返回"int",无论函数是否实际返回,都会导致奇怪的行为,但在许多平台上,没有任何奇怪的事情发生。在一个独立的实现中,如果"main"返回将会表现得很糟糕,但如果函数永远不会返回,函数的返回类型将是无关的,那么将"main"声明为"void"函数可能是合理和适当的,因为它永远不会返回值。