关于变量的外部声明

  在比较大的项目中,若需要使用全局变量,可以分以下四个步骤进行:

  1. 在项目根目录/include/globalvar.h中进行所有变量的原型声明(如int a);
  2. 在项目根目录/include/externvar.h中进行所有变量的外部声明(如extern int a);
  3. 在main.cpp文件中包含glbvariable.h头文件;
  4. 若需要在其它源文件中使用全局变量,则应包含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.).

posted @ 2012-06-22 16:11  Young!  阅读(1678)  评论(3编辑  收藏  举报