main()的链接是实现定义的意思是什么?

时间:2015-07-04 16:01:28

标签: c++ function linkage

C ++标准第3.6.1 / 3节说

  

main的链接是实现定义的

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

2 个答案:

答案 0 :(得分:6)

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

  

函数main不得在程序中使用main的链接是实现定义的。将main定义为已删除或将main声明为inlinestaticconstexpr的程序格式不正确。名称main未另外保留。

Linkage控制名称可用的范围,main()函数的名称在任何地方都无法用于代码,因此尝试使用链接标记它是没有意义的。< / p>

答案 1 :(得分:2)

C ++的目的是提供一种可编程的可移植抽象。标准规定了很多东西,无论你是否将C ++翻译成汇编,JavaScript,奶酪,煎锅或超模,都是明确的。

main的链接不是其中之一,因为它有点抽象泄漏:它(理论上)是与执行机器/奶酪/煎锅的各个部分相互作用的功能。处理跨越该边界的数据。数据输入,数据输出。

关于main函数的实质性详细信息不应该是标准规定的,因为main的整个目的是与标准无法控制的事物进行交互。

话虽如此,there are still significant restrictions emplaced upon main,并且在大多数实现中它甚至没有用作入口点 - 编译器的C ++运行时中的某些内部函数通常会充当入口点,执行静态初始化和其他一些事情在调用main之前,因为,那是关于唯一理智的方法。