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

问题描述 投票:1回答:1

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

c++ g++
1个回答
2
投票

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

通常,使用g++,您将使用libstdc++,即GNU C ++库(后者依赖于glibc,即GNU C库)。默认情况下,这个看起来像C名称使用C链接。如果您查看源本身,您将看到可以使用的4组不同的C头。

在任何情况下,您都不应该依赖它,它也可能在没有任何警告的情况下发生变化,即使在发布之间也是如此。

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

话虽如此,主要的标准库/编译器提供它们为extern "C",甚至是Windows上的MSVC;即使你使用C ++ cname头文件(当然是全局命名空间中的头文件)。

© www.soinside.com 2019 - 2024. All rights reserved.