while(0)和while (1或其他数字)有什么不同??
int main() {
do {
printf("Math ");
} while (0);
printf("Computer");
}发布于 2019-12-15 00:13:54
在C中,所有非零值都是"true“,零是"false”。因此,如果将数字用作逻辑表达式,它将充当true或false的逻辑值。您甚至可以将指针用作逻辑值
char *ptr;
if(*ptr)
{
//do something if ptr is not NULL
}
else
{
//do something if ptr is NULL
}在多语句宏中使用do {... } while(0)。为什么?
让我们分析一下if语句:
if(condition)
macro(x);
else
foo();如果macro只是简单的复合语句,如下所示:
#define macro(x) {x *= 2; printf("%d\n",x);},则if语句将不会编译
但是如果我们这样定义宏:
#define macro(x) do{x *= 2; printf("%d\n",x);}while(0)
一切都很好,语法上也没问题。
你可以在这里自己测试一下:https://godbolt.org/z/RW7Zmo
当在{}内的语句之后检查条件时,do {...} while(0)将只执行一次
https://stackoverflow.com/questions/59336227
复制相似问题