让我们先来看一个例子。 在下面的工程中,共有三个文件:main.cpp、func.cpp、var.h。 其中var.h中定义了一个int型的变量: 在func中定义了一个函数,返回刚才定义的var变量: 最后是main.c,在main函数中调用func函数 1 //main.cpp 2 #include <stdio.h> 3 #include "var.h" 4 5 int func(void); 6 7 int main(void) 8 { 9 int i = func(); 10 } 接着编译,链接。编译时不会有错误,但是链接时会报错。在VC6中提示错误如下: func.obj : error LNK2005: "int var" (?var@@3HA) already defined in main.obj
这是一个常见的错误。这里 但是有时候,确实把一些全局变量定义在一个头文件里会比较方便。下面介绍一个常见的方法: 1 //global.h 2 #ifdef GLOBAL_VARIABLES_HERE 3 #undef EXTERN 4 #define EXTERN 5 #endif 6 7 //下面是全局变量的定义 8 //前面加上EXTERN修饰 9 10 EXTERN int var; 这样,在global.cpp中通过定义GLOBAL_VARIABLES_HERE宏,能够将EXTERN展开成空宏。而其它地方(一般在重要的头文件里): 1 #define EXTERN extern 这样就可以了 |
|