main()的链接是由实现定义的,这意味着什么
What does it mean that linkage of main() is implementation defined?
C++标准第3.6.1/3节规定
主要的链接是实现定义的
这是什么意思?为什么要定义实现?C也一样吗?
因为禁止引用函数main
(如果引用整个规则会有所帮助(,所以main
的链接对用户代码没有任何影响:
程序中不得使用函数main。
main
的链接是实现定义的。将main
定义为已删除或将main
声明为inline
、static
或constexpr
的程序格式错误。名称main
不会以其他方式保留。
链接控制名称可用的范围,main()
函数的名称在任何地方都不可供代码使用,因此尝试用链接标记它是没有意义的。
C++的目的是在编程过程中提供一个可移植的抽象。许多东西都是由标准指定的,这样无论你是将C++翻译成汇编、JavaScript、奶酪、煎锅还是超模,都能做到毫不含糊。
main
的链接不是其中之一,因为它有点抽象泄漏:它(理论上(是与执行机器/奶酪/煎锅的部件交互并处理跨越该边界的数据的函数。数据输入,数据输出。
关于main
功能的实质性细节不应被标准强制执行,因为main
的全部目的是与标准无法控制的事物进行接口
话虽如此,对main
仍然有很大的限制,在大多数实现中,它甚至没有被用作入口点—编译器C++运行时中的一些内部函数通常会充当入口点,在调用main
之前执行静态初始化和其他一些事情,因为这是唯一合理的方法。
相关文章:
- 如何正确实现和访问运算符的各种自定义枚举器
- 根据C++标准的定义实现"is_similar"类型特征
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 它是否定义了哪些算法可以接受可变 lambda 的实现?
- 双链表的自定义实现不起作用(教育)
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- 为自定义打印调试实现传递任何类型的变量
- 基于自定义void_t实现的成员检测
- c++ 中的自定义分配器,用于不调用secure_string实现
- C# HashSet VS C++ std::unordered_set 使用自定义类键。C++慢...不可能。如何实现 C# 的速度?
- 私有在函数定义/实现的返回值范围内是什么意思 (c++)?
- 如何测试AVL树的自定义实现
- DirectX 12自定义实现与DirectX 11相同
- 可以将STD :: StreamBuf的自定义实现中的异常交付给流用户
- 从链表访问对象(自定义实现)
- C++中 malloc 的自定义实现
- 隐藏类型定义实现
- 自定义实现具有位表示的bool向量-如何实现运算符[]
- 在OpenCV中自定义实现
- c_str() 自定义实现/在每个字符串末尾"="