定义变量出现的问题(一般不定义在#ifndef中)。
?
1 #ifndef PRECMPL
2 ? ? #define PRECMPL
3 ? ? int var;
4 #endif
? ? ?其中有个变量定义,在VC中链接时会出现变量var重复定义的错误,而在C中成功编译。
?
? ? ?(1) 当第一个使用这个头文件的.cpp文件生成.obj时,var在里面定义;当另一个使用该头文件的.cpp文件再次(单独)生成.obj时,var又被定义;然后两个obj被第三个包含该头文件.cpp连接在一起,会出现重复定义。
?
? ? ?(2) 把源程序文件扩展名改成.c后,VC按照
C语言语法对源程序进行编译。在
C语言中,遇到多个int var则自动认为其中一个是定义,其他的是声明。
?
? ? ?(3) C语言和
C++语言连接结果不同,可能是在进行编译时,
C++语言将全局变量默认为强符号,所以连接出错。C语言则依照是否初始化进行强弱的判断的(仅供参考)。
?
? ? ?解决方法:
?
? ? ?(1) 把源程序文件扩展名改成.c。
?
? ? ?(2) .h中只声明 extern int var;,在.cpp中定义(推荐)
?
复制代码
1 //
2 #ifndef ?__X_H
3 ? ? #define ?__X_H
4 ? ? extern int var;
5 #endif
6
7 int var = 0;
复制代码
? ? ?综上,变量一般不要定义在.h文件中。
?
?
?
?