gpt4 book ai didi

c++ - 带有 const 的外部 "C"

转载 作者:太空狗 更新时间:2023-10-29 23:50:49 25 4
gpt4 key购买 nike

我们的系统中有一段 C 代码,其中包含一些像这样的具有全局访问权限的数组:

来源.h

extern const int magic[5];

来源.c:

const int magic[] = { 1, 2, 3, 4, 5};

有人认为将其更改为 C++ 是个好主意,因此上面的代码最终出现在 extern "C" block 中:

来源.h:

extern "C" { 
const int magic[5];
}

来源.cc:

extern "C" {
const int magic[] = { 1, 2, 3, 4, 5};
}

这个编译没有 gcc -Wall 的吱吱声

直到有人试图使用那个数组我们才发现问题。在 extern "C" 中使用 const 根本不会生成任何外部符号。 gcc、sun workshop 和 ibm 的编译器都会出现这种情况。

鉴于 gcc 不会警告您您正在做一些奇怪的事情,我有点不知道这是否是预期的行为。

那么这个行为是由标准指定的,还是一个相当普遍的错误?

最佳答案

const 变量具有内部链接(如同声明为 static),除非您使用 extern 指定外部链接。如果您想在一个源文件中定义它并从其他源文件访问它,您将需要外部链接。

这是使用 extern "C" 指定语言链接的补充。

extern "C" { 
extern const int magic[5];
}

您的 C 声明正确指定了外部链接;但是当你改用 C++ 时你删除了它。

关于c++ - 带有 const 的外部 "C",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26592740/

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