gpt4 book ai didi

c++ - 在没有功能的情况下使用 extern "C"

转载 作者:搜寻专家 更新时间:2023-10-31 01:12:59 25 4
gpt4 key购买 nike

我读了 Dale Rogerson 的书“Inside COM”。在第 5 章中,他写道(抱歉,我翻译成英文):

extern "C" is for C linkage. If a function is marked as extern "C", compiler wil not change function's name to other, for example: ?CreateInstance@@YAPAUIUncnown@@XZ.

这对我来说很清楚。但是作者在其他地方使用了 extern "C" 并且没有解释原因:

#include <objbase.h>

extern "C"
{
// {32bb8320-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IX =
{0x32bb8320, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;

// {32bb8321-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IY =
{0x32bb8321, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;

// {32bb8322-b41b-11cf-a6bb-0080c7b2d682}
extern const IID IID_IZ =
{0x32bb8322, 0xb41b, 0x11cf,
{0xa6, 0xbb, 0x0, 0x80, 0xc7, 0xb2, 0xd6, 0x82}} ;

// The extern is required to allocate memory for C++ constants.
}

这不是函数...为什么作者在这种情况下使用 extern "C"

最好的问候,安德烈

最佳答案

像这样的 block 上的 extern "C"就像将 extern "C"应用于 block 中的每个声明;它声明所有这些都使用 C 链接。

非函数上的 extern "C"与函数上的 extern "C"做同样的事情;它使对象使用 C 语义进行命名,以及任何其他相关内容。

有关详细信息,您可能需要引用标准第 7.5 条链接规范 [dcl.link](尽管它是使用一种难懂的英语形式编写的)。


语言链接是为了可以从不同的语言访问声明的实体。这究竟意味着什么取决于特定的语言和 C++ 实现。传统上,对于 C,这意味着函数的符号和调用约定已更改。据我所知,在大多数实现中,非函数没有什么不同。只是语言规范并未说明您可以期望从 C 访问这些实体,除非您使用 extern "C"。

关于c++ - 在没有功能的情况下使用 extern "C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182924/

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