根据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”链接?
答案 0 :(得分:2)
这取决于您使用的标准库,而不是编译器。
通常,通过g++
,您将使用libstdc++
,即GNU C ++库(而该库又依赖于glibc
,即GNU C库)。默认情况下,该名称看起来像对C名称使用C链接。如果查看源代码本身,当前会看到4组不同的C头文件。
无论如何,您都不应依赖它,并且即使在两次发行之间,它也可能会更改而不会发出警告。
理想情况下,如果出于某种原因(无论是否损坏)需要导出的名称,则应直接从共享库或编译器使用的标头中选择导出的名称,而不是依赖给定的链接。
已经说过,主要的标准库/编译器将它们提供为extern "C"
,甚至是Windows上的MSVC。即使您使用C ++ cname
标头(当然是全局名称空间中的标头)。