【问题标题】:C++ void return type of main()main() 的 C++ void 返回类型
【发布时间】:2011-04-08 19:22:16
【问题描述】:

一些 C++ 编译器允许主函数具有返回类型 void。但是操作系统不要求返回int类型值来指定程序是否正常结束吗?

【问题讨论】:

  • 你从哪里学来的? C++ 要求 main 的返回类型为 int
  • @dirkgently:关于 C. 5.1.2.2.1 bulet point 1 是错误的,特别允许 main 以“其他一些实现定义的方式”定义。同样 5.1.2.2.3 以“如果 main 函数的返回类型是与 int 兼容的类型”这句话开头,这意味着 main 不必返回 int。
  • 来自同一子句:应使用 int 的返回类型定义。您引用的部分被一些专家认为是缺陷:groups.google.com/group/comp.std.c/msg/7340b025f5fe8657groups.google.com/group/comp.lang.c/msg/c1a1cc0a23af7227。最后,该标准的其他领域是依赖于实现的,建议不要为了严格遵守的程序而混淆这些领域。符合标准的程序是符合标准的实现所接受的任何东西——但这并不能使void main 更正确。

标签: c++


【解决方案1】:

C++ 标准不允许 main() 的返回类型为 void。不过,大多数编译器会因为历史原因让它通过。

【讨论】:

    【解决方案2】:

    C++不允许允许main 具有void 返回类型。已发布的 C++ 标准要求它为 int。一些 C++ 编译器允许您使用void,但不建议这样做。一般来说,操作系统并不关心一种或另一种方式。特定的操作系统可能需要程序给出返回值,但它不一定来自main 的返回值。如果 C++ 编译器允许void,那么它可能会提供一些其他方法来指定程序的退出代码。

    【讨论】:

      【解决方案3】:

      main 返回void 是为了向后兼容,但这是不合法的。

      在这种情况下,退出代码将为 0。您仍然可以使用退出函数更改退出代码。

      【讨论】:

        【解决方案4】:

        C++ 允许 main 函数的返回类型为 void

        不,它没有。

        C++ 标准只需要 2 种不同类型的主要签名。如果返回类型为int,则可以选择添加其他。

        根据 C++ 标准,允许 void 返回类型的 C++ 实现是不正确的。

        C++03 标准 S.3.6.1-2:

        实现不应预定义主要功能。 该功能不得重载。它应 具有 int 类型的返回类型,否则它的类型是实现定义的。 所有实现都应允许 以下 main 的定义:

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

        如果您想要可移植的 C++ 代码,或者要编写好的 C++ 示例,那么您应该始终使用上述两种变体之一。

        【讨论】:

          【解决方案5】:

          这就是标准 C++ 不允许使用 void main() 的原因 - 尽管某些编译器(例如 gcc)确实允许这样做。

          简而言之:始终使用 int main(),永远不要使用 void main()。

          【讨论】:

          • gcc 允许 C 使用它,但禁止 C++ 使用它,即使您告诉它是 -fpermissive。
          【解决方案6】:

          在从 main 返回 void 是合法的语言(不是 C++)中,操作系统通常会在正常(非异常)程序终止时看到返回值 0

          【讨论】:

            【解决方案7】:
            But doesn't OS require int type value returned to specify whether program 
            ended well or not?
            

            为什么总是这样?在 Windows 上,当您双击该图标时,该过程在结束后终止。操作系统不在那里检查返回类型。即使在 linux 上,如果您只是将二进制文件作为 ./runBinary 运行,它也只会运行并退出。操作系统本身不会显示失败或成功的消息。

            上述所有答案都是正确的,标准说它是 int,但一些编译器也允许 void。

            【讨论】:

              【解决方案8】:

              根据编译器的不同,您可能可以使用 void main 函数,但是正确的方法(真正符合标准的编译器应该遵循)是返回 int ,其中 0 是一个不错且干净的退出,其他任何表示你的程序做错了什么。

              【讨论】:

                猜你喜欢
                • 2017-02-28
                • 2016-06-29
                • 1970-01-01
                • 1970-01-01
                • 2016-03-06
                • 2013-07-16
                • 1970-01-01
                • 2015-06-29
                • 2015-03-24
                相关资源
                最近更新 更多