【问题标题】:main function in c - program termination success or failurec中的main函数 - 程序终止成功或失败
【发布时间】:2015-11-19 13:24:33
【问题描述】:

据我了解,如果 main 函数返回 0,这表明程序总是成功终止。即使成功由另一个 int 值指示。

如果 main 返回一个非零值,如果这代表不成功的程序终止或另一个错误代码,则它是特定于实现的

如果 status 的值为零或 EXIT_SUCCESS,则 状态成功终止的实现定义形式是 回来。如果 status 的值为 EXIT_FAILURE,则 状态的实现定义形式不成功终止 被退回。否则返回的状态为 实现定义。)

所以在 C 标准中只定义了成功(返回 0),而不是如何解释非零 int 值,对吗?例如。如果在某个系统中 1 代表“成功”,则返回 0 也会交付 1 吗?这是怎么做到的?

【问题讨论】:

  • 标准定义了它的作用,仅此而已。那是如何实现的,这超出了标准的范围。尽管在 Unixoids 和 Windows 下,它是一个身份映射(mod 256)。
  • 密切相关:stackoverflow.com/q/8867871/827263(我不确定它是否完全重复)。
  • 语言标准不能轻易定义操作系统应该如何处理返回值。有些系统根本不关心返回什么,而 C 标准对此无能为力。

标签: c main


【解决方案1】:

main 函数是代码的入口点,它不是可执行文件的入口点。可执行文件包含一个操作系统定义的入口点,它在调用main 之前运行一些启动代码。

main 像普通函数一样从启动代码中调用。 main 的返回值由启动代码接收,它可以执行任何必要的转换以符合操作系统的要求。

启动代码特定于每个操作系统。操作系统对可执行文件的操作和环境有要求。 C 语言对 C 代码运行的环境有要求(特别是 main 的参数和 main 的返回值)。启动代码有责任弥合这两组需求之间的差距。

启动代码作为目标文件交付,通常称为“crt.o”,是“C 运行时”的缩写。该文件由链接器包含在可执行文件中。您可以通过检查链接器命令行找到该文件的实际名称。启动文件通常是链接器命令行上的第一个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 2013-07-27
    • 2017-01-20
    相关资源
    最近更新 更多