C语言条件编译

头文件
#ifdef MAIN_REGS#define _EXTERN //定义变量#else#define _EXTERN extern //声明变量#endif

_EXTERN volatile struct//{ enum _DispSt State; u8 Time;} sDisp;

C文件
#define MAIN_REGS
我要是不定义define MAIN_REGS ,它就报错,说sDisp没有定义!这是为什么?

#ifdef MAIN_REGS
#define _EXTERN //把_EXTERN定义为空,就是_EXTERN啥也不表示
#else
#define _EXTERN extern //把_EXTERN定义为extern
#endif

不定义MAIN_REGS的时候,_EXTERN被定义为关键字extern
下面程序就变成
extern volatile struct
{
enum _DispSt State;
u8 Time;}
sDisp;
extern 的定义,extern 表示一个声明,定义在其他地方
所以编译器认为你只是在声明一个变量,如果你没有额外在其他文件内定义sDisp
肯定是要报错了
extern的含义请参考http://baike.baidu.com/link?url=9EVDWx7LdQeWITokvsRzSCc_ouvquAo-A6nP8Fxp3WuwEMTCLdwLegUhoi6uI6CW
温馨提示:答案为网友推荐,仅供参考