关于变量的外部声明
在比较大的项目中,若需要使用全局变量,可以分以下四个步骤进行:
- 在项目根目录/include/globalvar.h中进行所有变量的原型声明(如int a);
- 在项目根目录/include/externvar.h中进行所有变量的外部声明(如extern int a);
- 在main.cpp文件中包含glbvariable.h头文件;
- 若需要在其它源文件中使用全局变量,则应包含externvar.h头文件。
需要注意的是,若globalvar.h中需要改动,则必须删除原目标文件main.o,使用make重新编译。原因如下:
根据Makefile的机制,若目标文件main.o修改时间晚于依赖文件main.cpp的修改时间,则不进行重新编译。而依赖文件main.cpp所包含的globalvar.h存在变动,并不在main.cpp的修改时间上得以体现,即main.cpp是不变的。而在link阶段,根据extern的机制,在已加载到内存中的目标文件代码中寻找该变量,若main.o 不是最新的,globalvar.h的改动就无法生效,于是就会出现找不到该变量的错误(undefined reference to ‘XXX’. Collect2: ld returned 1 exit status.).