C语言(复杂宏的两种写法)

2019-08-08 16:06:18 浏览数 (1)

听说复杂宏的编写方式有两种,一种是用do...while(0),一种是语句表达式。内核源代码中顶喜欢他们俩,不可不认识哟!

拓展:

第一,do...while(0)形式实现复杂宏,请看:

do...while(0)确保了整个复合语句只被执行一遍,注意到最后的while(0)后面是不带分号的,因为一般我们在调用一个宏的时候会带上分号,比如上述的宏:

SEARCH(i, some_array, m);

第二种编写复杂宏的方式是语句表达式,例如我们可以将上述代码改成:

这两种形式的区别是,复合语句表达式可以作为右值,给另一个变量赋值。而do...while(0)不可以。

0 人点赞