gpt4 book ai didi

C++ 外部/多重定义

转载 作者:太空狗 更新时间:2023-10-29 19:38:57 27 4
gpt4 key购买 nike

我正在尝试使用 externs 在 C++ 中连接到 Ada。这两种实现有什么区别?

实现A

namespace Ada
{
extern "C"
{
int getNumber();
int index;
int value;
}
}

实现 B

namespace Ada
{
extern "C"
{
int getNumber();
}
extern "C" int index;
extern "C" int value;
}

两种实现都编译得很好。但是 Impl-A 无法链接,我得到了 indexvalue 的多重定义错误。我只是想了解其中的差异。

最佳答案

extern "C"仅传达用于 extern "C" block 中代码的链接约定。该 block 中的任何内容都将被链接,就好像它是纯 c 一样。令人困惑的是,extern int 是完全不同的。这意味着你保证在某处有一个实际的 int 命名索引和一个实际的 int 命名 value,但在这里找不到它们。在您的实现中 -A 中的整数实际上不是第二种意义上的外部 - 外部“C”仅意味着它们提供了严格的 C 链接约定。

相同的关键字但完全不同的用途,这是不幸的,因为它会导致这样的奇怪问题。混合使用它们是合法的(很明显),但它们的行为并不像其名称所暗示的那样。

编辑

有关 C++ 标准中定义的外部怪异的真正定义,请参阅 Charle 的回复。

关于C++ 外部/多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3639099/

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