如果文件A通过extern调用了文件B的函数fun,比如:
A:extern int fun();
B: int fun() {cout<<x<<endl;}
而变量x又是文件B的全局变量,比如:
B: int x=10;
这个时候尝试调用该函数:
A: fun();
会输出结果:10
问题是,A引入的只是fun()函数,该函数在A环境下运行的时候,从哪获知x=10啊?
如果全局变量x的定义放到A里面(B里面去掉),又会是什么情况?
A调用fun()函数,不需要知道fun()函数的依赖,fun()函数会找自己的依赖。
如果全局变量定义到A里面,fun()函数找不到自己的依赖,肯能会报错吧。
解决方案:
如果想在文件A中正确读取文件B中的全局变量x,需要在文件A中使用extern声明该变量,以确保使用的是同一个全局变量。具体的步骤如下:
例如,在文件A中声明:
extern int x;
extern int x;
fun(...);
需要注意的是,如果将变量x的定义从B文件中移到A文件中,将会有以下影响:
int x = ...;
extern int x;