首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C中的While-loop

C中的While-loop
EN

Stack Overflow用户
提问于 2019-12-14 22:59:19
回答 1查看 105关注 0票数 0

while(0)和while (1或其他数字)有什么不同??

代码语言:javascript
复制
int main() {
   do {
      printf("Math ");
   } while (0);

   printf("Computer");
}
EN

回答 1

Stack Overflow用户

发布于 2019-12-15 00:13:54

在C中,所有非零值都是"true“,零是"false”。因此,如果将数字用作逻辑表达式,它将充当truefalse的逻辑值。您甚至可以将指针用作逻辑值

代码语言:javascript
复制
char *ptr;
if(*ptr)
{
   //do something if ptr is not NULL 
}
else
{
   //do something if ptr is NULL 
}

在多语句宏中使用do {... } while(0)。为什么?

让我们分析一下if语句:

代码语言:javascript
复制
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)将只执行一次

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59336227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档