加速度的笔记 https://passport2.21ic.com/?205965 [收藏] [复制] [RSS] 单片机、ARM、实时操作系统、uCOS-II交流.

日志

宏定义技巧st宏定义理解

已有 1275 次阅读2010-10-27 07:04 |个人分类:C/C++|系统分类:单片机| st

这个宏定义如下(摘自TI Z-Stack1.4.3中hal_defs.h文件):
#define st(x)      do { x } while (__LINE__ == -1)
这个宏定义被其它的宏定义用来构建一个完全有效的C声明。如果没有这个宏定义,那么在if/else
条件语句中可能得不到预期的结果。
例如,以下的应用
#define SET_REGS()  st( ioreg1 = 0; ioreg2 = 0; )
代替
#define SET_REGS()  { ioreg1 = 0; ioreg2 = 0; }

#define  SET_REGS()    ioreg1 = 0; ioreg2 = 0;
最后这个宏定义在if/else条件句中将不能得到预期的结果。
倒数第二个宏将导致编译器错误在某些使用if/else结构时。



#define st(x)      do { x } while (__LINE__ == -1)语句分析
__LINE__是C/C++的内部宏定义,得到当前代码的行号.
do
{x}while(__LINE__==-1)
因行号肯定是大于-1的,所以这个循环只执行一次。
  


             加速度   Oct.27.2010


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)