sách gpt4 ai đã đi

C++ extern/nhiều định nghĩa

In lại Tác giả: Space Dog 更新时间:2023-10-29 19:38:57 27 4
mua khóa gpt4 Nike

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

实现A

namespace Ada
{
extern "C"
{
int getNumber();
int chỉ số;
int value;
}
}

实现 B

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

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

1 Câu trả lời

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

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

biên tập

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

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

27 4 0
Bài viết được đề xuất: C++ is_str_empty 谓词
Bài viết được đề xuất: C++ Void 非指针
Bài viết được đề xuất: C++ "undefined reference to ' Foo::Foo(std::string )' "
Bài viết được đề xuất: c++ - 在 C++ 中初始化已声明的 char 数组
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com