猿问

DO{…}When(0)-它有什么好处?

DO{…}When(0)-它有什么好处?

我看到这种表情已经有十多年了。我一直在想这有什么好处。由于我主要是在#Definition中看到它,所以我认为它有利于内部范围变量声明和使用中断(而不是Gotos)。

对别的有好处吗?你用过吗?


喵喵时光机
浏览 503回答 3
3回答

慕尼黑的夜晚无繁华

它是C中唯一可以使用的构造#define多语句操作,将分号放在后面,但仍在if声明。例如:#define FOO(x) foo(x); bar(x)if (condition)     FOO(x);else // syntax error here     ...;即使使用牙套也于事无补:#define FOO(x) { foo(x); bar(x); }在if语句需要省略分号,这是违反直觉的:if (condition)     FOO(x)else     ...如果像这样定义foo:#define FOO(x) do { foo(x); bar(x); } while (0)然后,以下内容在语法上是正确的:if (condition)     FOO(x);else     ....

慕斯709654

这是一种简化错误检查和避免深度嵌套IF的方法。do {   // do something   if (error) {     break;   }   // do something else   if (error) {     break;   }   // etc..} while (0);

浮云间

它帮助将多个语句分组到一个单独的语句中,这样类似于函数的宏实际上可以作为一个函数使用。假设你有#define FOO(n)   foo(n);bar(n)而你是这样做的void foobar(int n){   if (n)      FOO(n);}然后这个扩展到void foobar(int n){   if (n)      foo(n);bar(n);}注意,第二个调用(bar(N)不再是if语句的一部分。这两种方法都包含在do{}while(0)中,您也可以在if语句中使用宏。
随时随地看视频慕课网APP
我要回答