为什么'x'有内部联系而不是外部联系?

Eri*_*tad 3 c++ gcc

基于我对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;
}
Run Code Online (Sandbox Code Playgroud)

file1.cc:

typedef const char CC;

CC x[] = "abc";
Run Code Online (Sandbox Code Playgroud)

Ada*_*dam 5

const一切都有所不同.在C++中,const在文件范围内声明的变量隐式具有内部链接.这是因为在C++中,const值可以用作编译时常量(不留任何东西链接).

看到这个答案.

您可以extern在file1.cc中添加定义,以明确指定外部链接x:

extern CC x[] = "abc";
Run Code Online (Sandbox Code Playgroud)

  • @CaptainObvlious,仅在`main.cc`中. (3认同)