const变量默认为文件的本地

时间:2013-10-25 07:37:47

标签: c++

在c ++入门(第四版)中。有以下部分

与其他变量不同,除非另有说明,否则在全局范围内声明的const变量是 定义对象的文件的本地。该变量仅存在于该文件中,不能存在 由其他文件访问。 我们可以通过指定它是extern来使整个程序中的const对象可访问:

// file_1.cc

// defines and initializes a const that is accessible to other files   

extern const int bufSize = fcn();

// file_2.cc
extern const int bufSize; // uses bufSize from file_1

// uses bufSize defined in file_1

for (int index = 0; index != bufSize; ++index)

      // ...

我试过这个

  // file_1.cc
  // defines and initializes a const that is accessible to other files
  const int bufSize = fcn();
  // file_2.cc
  extern const int bufSize; // uses bufSize from file_1
  // uses bufSize defined in file_1
  for (int index = 0; index != bufSize; ++index)
        // ...

这也没问题。所以我的问题是:

const变量是本地文件还是这只是一个错误?

非常感谢。

2 个答案:

答案 0 :(得分:3)

在C中,常量值默认为外部链接,因此它们只能出现在源文件中。在C ++中,常量值默认为内部链接,这允许它们出现在头文件中。

当您在C源代码文件中将变量声明为const时,请执行以下操作:

const int i = 2;

然后您可以在另一个模块中使用此变量,如下所示:

extern const int i;

但是要在C ++中获得相同的行为,必须将const变量声明为:

extern const int i = 2;

如果您希望在C ++源代码文件中声明extern变量以用于C源代码文件,请使用:

extern "C" const int x=10;

防止C ++编译器进行名称修改。

参考:http://msdn.microsoft.com/en-us/library/357syhfh%28v=vs.71%29.aspx

答案 1 :(得分:0)

extern只是一个声明,无论变量是否为const

const暗示内部链接。您可以将其视为

static int x;

在全局范围内,您无法修改。如果通过“本地文件”表示内部链接,那么是的,这是正确的。