简单的说你只要在头文件上定义全局变量几乎就全是错的,除非你能保证这个头文件只会包含一次(#ifndel只能保证一个文件里不会重复包含,但是在多个文件里就会都进得去,使得在链接阶段会出现重定义。),c++与C语言的差别,C语言int a ; int a ;能通过,(没有赋值时他认为是声明)。c++是通不过的他会认为是重定义。
正确的全局变量定义是
// .h
#ifndel XXX
#define XXX
extern int a;
......
#endf
//.c
int a = 0;
//或者
//.h
#ifndel XXX
#define XXX
#ifdel YYY
/*extern */ int a;
#else
extern int a;
#endif
......
#endf
//.c
#define YYY