繁体   English   中英

外部“C”与const

[英]extern “C” with const

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

source.h

extern const int magic[5];

由source.c:

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

有人认为将此更改为C ++是一个好主意,因此上述内容最终出现在extern "C"块中:

source.h:

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

source.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 ++时你删除了它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM