一种预编译容易出错的地方:
经常见到这样的一段程序:
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中这样比较整齐,,但是也容易出现不需要引脚的变量也引用了,但编译是否会报错还未可知。
二 通过 #undefine 限定宏只在file_AAA.c中
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /////////////////////////////////////////////////////// 2 /*file_AAA.h*/ 3 #ifndef _EXTERN_ 4 #define _EXTERN_ extern 5 #endif 6 7 _EXTERN_ int16_t g_AAA_Val; 8 ////////////////////////////////////////////////////// 9 10 /*file_AAA.c*/ 11 12 #define EXTERN 13 #include "file_AAA.h" 14 #undefine EXTERN 15 //////////////////////////////////// 16 /*file_BBB.c*/ 17 #include "file_AAA.h"