g ++是将C标准库的名称声明为extern“ C”链接还是extern“ C ++”?

时间:2019-04-12 11:24:25

标签: c++ g++

根据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”链接?

1 个答案:

答案 0 :(得分:2)

这取决于您使用的标准库,而不是编译器。

通常,通过g++,您将使用libstdc++,即GNU C ++库(而该库又依赖于glibc,即GNU C库)。默认情况下,该名称看起来像对C名称使用C链接。如果查看源代码本身,当前会看到4组不同的C头文件。

无论如何,您都不应依赖它,并且即使在两次发行之间,它也可能会更改而不会发出警告。

理想情况下,如果出于某种原因(无论是否损坏)需要导出的名称,则应直接从共享库或编译器使用的标头中选择导出的名称,而不是依赖给定的链接。

已经说过,主要的标准库/编译器将它们提供为extern "C",甚至是Windows上的MSVC。即使您使用C ++ cname标头(当然是全局名称空间中的标头)。