根据我对 C++ 2011 规范的阅读,我认为以下代码将在 file1.cc 中创建一个带有外部链接的变量“x”。我认为我可以从 main.cc 访问该变量,因此该程序将打印“x”。但是,我收到了一个链接器错误,原因是 main.cc 中对“x”的 undefined reference 。为什么 file1.cc 中的“x”有内部链接?我认为编译器将第 3.5.3 节解释为在 file1.cc 中给出了“x”内部链接。但是,我没有“明确声明”“x”为“const”,因为该部分需要。我使用的是 g++ 4.6.3 版。
主.cc:
#include <iostream>
typedef const char CC;
extern CC x[];
int main(void) {
std::cout << x[0] << std::endl;
}
文件1.cc:
typedef const char CC;
CC x[] = "abc";
最佳答案
const
使一切变得不同。在 C++ 中,在文件范围内声明的 const
变量隐式具有内部链接。这是因为在 C++ 中,const 值可以用作编译时常量(不留任何链接)。
见 this answer 。
您可以将 extern
添加到 file1.cc 中的定义中,以明确指定 x
的外部链接:
extern CC x[] = "abc";
关于c++ - 为什么 'x' 有内部链接而不是外部链接?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22057464/