前两天群里有人问了这样一个问题:
在 a 文件中定义了一个全局变量,可以在 b 文件中引用。但一旦把全局变量改为 const 之后,就无法在 b 文件中引用,编译(链接)报错“无法解析的外部符号”,这是为什么?
这是因为 const 修饰的变量默认具有文件作用域,如果想和非 const 变量一样具有全局作用域,需要在定义时(不仅仅只是声明时)显式地增加 extern
关键字。
1. 普通全局变量,跨文件引用OK
// a.cpp
int g = 3;
// b.cpp
#include<iostream>
extern int g;
int main() {
std::cout << g << std::endl;
}
2. const 全局变量,跨文件引用链接报错
// a.cpp
const int g = 3;
// b.cpp
#include<iostream>
extern const int g; // 链接报错,无法解析的外部符号,找不到 g 的定义!
int main() {
std::cout << g << std::endl;
}
3 定义 const 变量时显式增加 extern,OK
// a.cpp
extern const int g = 3; // 增加 extern
// b.cpp
#include<iostream>
extern const int g;
int main() {
std::cout << g << std::endl;
}
标签:文件,const,int,C++,cpp,extern,全局变量
From: https://www.cnblogs.com/tengzijian/p/17978022