基于我对C ++ 2011规范的阅读,我认为以下代码将在file1.cc中创建一个带有外部链接的变量“x”。我认为我可以从main.cc访问该变量,因此该程序将打印'x'。但是,我从main.cc获取了对'x'的未定义引用的链接器错误。为什么file1.cc中的'x'有内部链接?我认为编译器将第3.5.3节解释为在file1.cc中给出'x'内部链接。但是我没有“明确声明”'x'是'const',因为该部分需要。我使用的是g ++版本4.6.3。
main.cc:
#include <iostream>
typedef const char CC;
extern CC x[];
int main(void) {
std::cout << x[0] << std::endl;
}
file1.cc:
typedef const char CC;
CC x[] = "abc";
答案 0 :(得分:5)
const
完全不同。在C ++ const
中,在文件范围内声明的变量隐式具有内部链接。这是因为在C ++中,const值可以用作编译时常量(不留任何东西链接)。
请参阅this answer。
您可以在file1.cc中的定义中添加extern
,以明确指定x
的外部链接:
extern CC x[] = "abc";