一种预编译容易出错的地方:

经常见到这样的一段程序:

1 /* file of aa.h*/

#ifdef XXX_MODULE_GLOBALS
#define XXX_EXT
#else
#define XXX_EXT extern
#endif

XXX_EXT unsigned char VAL1, VAL2......

// end of file of aa.h

2/* file of aa.c*/

#define XXX_MODULE_GLOBALS

#include aa.h 

VAL1=...

VAL2=...

3/* file of bb.c.......*/ 

#include aa.h 

VAL1=...

VAL2=...

总结:如果步骤二中

#define XXX_MODULE_GLOBALS

#include aa.h 

这两句的顺序不是这样的而是:

#include aa.h 

#define XXX_MODULE_GLOBALS

编译器就会报错:变量未定义,所以一定要注意顺序。

其实也可以直接将模块对外输出的变量;也放在xx.h中这样比较整齐,,但是也容易出现不需要引脚的变量也引用了,但编译是否会报错还未可知。

原文地址:https://www.cnblogs.com/jieruishu/p/5279263.html