2 个回答

main 的返回值表示程序是如何退出的。正常退出由来自 main 的 0 返回值表示。非零返回表示异常退出,但对于如何解释非零代码没有标准。正如其他人所指出的, void main() 被 C++ 标准禁止,不应使用。有效的 C++ main 签名是:

 int main()

int main(int argc, char* argv[])

这相当于

int main(int argc, char** argv)

还值得注意的是,在 C++ 中, int main() 可以不带返回语句,此时默认返回 0。对于 C99 程序也是如此。 return 0; 是否应该省略还有待商榷。有效的 C 程序主签名的范围要大得多。

效率不是 main 功能的问题。根据 C++ 标准,它只能进入和离开一次(标记程序的开始和终止)。对于 C,允许重新输入 main() ,但应避免。

原文由 workmad3 发布,翻译遵循 CC BY-SA 4.0 许可协议

ISO 现在要求 C 和 C++ 都将“int”作为“main”的返回类型。

两种语言以前都允许隐式“int”,并且可以在没有任何返回类型的情况下声明“main”。事实上,C++ 的第一个外部版本本身(1985 年 2 月的“cfront”版本 E),它是用自己的语言编写的,声明为“main”,没有任何返回类型……但返回一个整数值:错误数或 127,以较小者为准

至于返回 什么 的问题:C 和 C++ 的 ISO 标准与 POSIX 标准同步工作。对于任何符合 POSIX 标准的托管环境,

(1) 126 是为 OS 的 shell 保留的,用于指示不可执行的实用程序,

(2) 127 是为 OS 的 shell 保留的,表示没有找到的命令,

(3) 公用事业的退出值按公用事业单独列出,

(4) 在 shell 外调用实用程序的程序应该为自己的出口使用相似的值,

(5) 值 128 及以上用于指示因接收信号而导致的终止,

(6) 值 1-125 表示失败,

(7) 值 0 表示成功。

在 C 和 C++ 中,值 EXIT_SUCCESS 和 EXIT_FAILURE 用于处理最常见的情况:用于报告成功或只是一般性失败的程序。它们可以但不必分别等于 0 和 1。

这意味着如果您希望程序为不同的故障模式或状态指示返回不同的值,同时继续使用这两个常量,您可能必须首先确保您的附加“故障”或“状态”值位于严格在 max(EXIT_SUCCESS, EXIT_FAILURE) 和 126 之间(并希望中间有足够的空间),并保留 EXIT_FAILURE 以标记通用或默认故障模式。

否则,如果您不打算使用常量,那么您应该遵循 POSIX 的要求。

对于在独立环境或不符合 POSIX 的主机上使用的程序,我只能说以下内容:

我编写了独立程序——作为自定义运行时系统上的多线程程序(以及用于其他一切的自定义工具库)。我遵循的一般规则是:

(1) “main” 运行前台进程,通常只包含启动、配置或初始化例程,但也可以包括用于持续操作的前台进程(如轮询循环),

(2) “main” 返回到无限睡眠和等待循环,

(3) 没有定义或使用“main”的返回值,

(4) 后台进程单独运行,作为中断驱动和事件驱动线程,独立于“主”线程,仅在接收到复位信号或其他线程时终止……或者通过简单地关闭对任何事件的监视正在推动线程。

原文由 NinjaDarth 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题