main()的链接是由实现定义的,这意味着什么

What does it mean that linkage of main() is implementation defined?

本文关键字:定义 实现 意味着 什么 链接 main      更新时间:2023-10-16

C++标准第3.6.1/3节规定

主要的链接是实现定义的

这是什么意思?为什么要定义实现?C也一样吗?

因为禁止引用函数main(如果引用整个规则会有所帮助(,所以main的链接对用户代码没有任何影响:

程序中不得使用函数mainmain的链接是实现定义的。将main定义为已删除或将main声明为inlinestaticconstexpr的程序格式错误。名称main不会以其他方式保留。

链接控制名称可用的范围,main()函数的名称在任何地方都不可供代码使用,因此尝试用链接标记它是没有意义的。

C++的目的是在编程过程中提供一个可移植的抽象。许多东西都是由标准指定的,这样无论你是将C++翻译成汇编、JavaScript、奶酪、煎锅还是超模,都能做到毫不含糊。

main的链接不是其中之一,因为它有点抽象泄漏:它(理论上(是与执行机器/奶酪/煎锅的部件交互并处理跨越该边界的数据的函数。数据输入,数据输出。

关于main功能的实质性细节不应被标准强制执行,因为main的全部目的是与标准无法控制的事物进行接口

话虽如此,对main仍然有很大的限制,在大多数实现中,它甚至没有被用作入口点—编译器C++运行时中的一些内部函数通常会充当入口点,在调用main之前执行静态初始化和其他一些事情,因为这是唯一合理的方法。