根据ISO_14882_2014,第[17.6.2]节,
Whether a name from the C standard library declared with external linkage has
extern "C" or extern "C++" linkage is implementation-defined. It is
recommended that an implementation use extern "C++" linkage for this purpose.
由于这是一个实现定义的行为,我正在研究g ++文档,但没有任何内容。
g ++与C标准库函数有什么联系?我检查了这个名字是否因为任何功能而受到损坏..而且发现它不是。这是否意味着g ++具有外部“C”链接?
这取决于您使用的标准库,而不是编译器。
通常,使用g++
,您将使用libstdc++
,即GNU C ++库(后者依赖于glibc
,即GNU C库)。默认情况下,这个看起来像C名称使用C链接。如果您查看源本身,您将看到可以使用的4组不同的C头。
在任何情况下,您都不应该依赖它,它也可能在没有任何警告的情况下发生变化,即使在发布之间也是如此。
理想情况下,如果由于某种原因(无论是否损坏)需要导出的名称,您应该直接从共享对象或编译器使用的标头中提取它,而不是依赖于给定的链接。
话虽如此,主要的标准库/编译器提供它们为extern "C"
,甚至是Windows上的MSVC;即使你使用C ++ cname
头文件(当然是全局命名空间中的头文件)。