gpt4 book ai didi

c++ - g++ 是否将 C 标准库的名称声明为 extern "C"linkage 或 extern "C++"?

转载 作者:行者123 更新时间:2023-11-30 03:17:15 25 4
gpt4 key购买 nike

根据 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 头文件。

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

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

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

关于c++ - g++ 是否将 C 标准库的名称声明为 extern "C"linkage 或 extern "C++"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55650564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com