C中奇怪的#define语句

时间:2015-09-30 02:45:51

标签: c embedded

我有一个嵌入式C源代码。在它的定义中,它有很多#define行,如下所示:

#define XNV_SPI_TX(x)               st(U1CSR &= 0xFD; U1DBUF = (x);)

任何想法是什么     st() 意味着什么? 我使用IAR作为编译器和工具链。

2 个答案:

答案 0 :(得分:3)

感谢评论,这是我发现的:

/* (The while condition below evaluates false without generating a
 *  constant-controlling-loop type of warning on most compilers.)
 */
#define st(x)      do { x } while (__LINE__ == -1)

答案 1 :(得分:1)

此构造用于防止if / else条件显示意外行为。 例如,如果您有类似

的内容
#define assign() a=1;b=0;

在if / else语句中它的行为不会如预期的那样。