打印

宏定义与条件编译的疑惑。

[复制链接]
1478|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lyf9908|  楼主 | 2011-1-3 21:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
原来搞硬件的,想转去做软件,最近学习C语言,有很多问题,如比下面的一段代码:

#ifdef C_Timer
  #define Timer_ext   
#else
  #define Timer_ext    extern
#endif  

  Timer_ext  unsigned int  cur_ticks;
  Timer_ext  unsigned int  b_times;  
  Timer_ext  volatile bool   Flag_timer;

  如果C_Timer没有定义过,则Timer_ext的意思就是extern,则接下来的语句都定义为外部变量。
   但如果C_Timer有定义过,则把Timer_ext定义为标识,再用他去定义后面的语句,这有什么意义吗?

相关帖子

沙发
HWM| | 2011-1-4 08:34 | 只看该作者
re LZ:

如你所说:如果 C_Timer 未定义,则 Timer_ext 被定义成 extern。
但如果 C_Timer 有定义(不管定义成什么),那么 Timer_ext 将被定义成“空”。这就意味着下面的定义中的 Timer_ext 为“空”。

使用特权

评论回复
板凳
lyf9908|  楼主 | 2011-1-4 16:13 | 只看该作者
谢楼主
    不过,既然这样,干嘛不用个VOID.?
   #ifdef C_Timer
  #define Timer_ext  void
#else
  #define Timer_ext    extern
#endif

使用特权

评论回复
地板
HWM| | 2011-1-4 19:30 | 只看该作者
to 3L:

不能用“void”,这里只是文本上的“空”——即没有内容,而非 void 之意。如此类型将是:

unsigned int  cur_ticks;
unsigned int  b_times;  
volatile bool   Flag_timer;

否则将变成:

void  unsigned int  cur_ticks;
void  unsigned int  b_times;
void  volatile bool   Flag_timer;

这样自然不对。

使用特权

评论回复
5
xwj| | 2011-1-4 19:34 | 只看该作者
就是编译器编译前把Timer_ext 替换成什么都没有:“”,
“Timer_ext  unsigned int  cur_ticks;”    变成“  unsigned int  cur_ticks; ”
而不是变成“void  unsigned int  cur_ticks; ”

使用特权

评论回复
6
lyf9908|  楼主 | 2011-1-6 20:30 | 只看该作者
受益不小啊,我以前搞硬件的,现在都30岁了,才想起还要搞嵌入式软件,雄关漫道真如铁啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

133

主题

176

帖子

0

粉丝