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

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

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中  

 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"
View Code

 

posted on 2016-03-15 13:58  杰瑞鼠  阅读(191)  评论(0编辑  收藏  举报