在C中使用null语句

Agn*_*kas 24 c

null语句的典型用法是什么

;
Run Code Online (Sandbox Code Playgroud)

在C?

我知道它基本上用于跳过编译器所期望的表达式,但是在这里我只对这种用例的实际例子感兴趣.

Ebo*_*ike 23

它通常是由预处理器剥离的代码块的副作用,例如

#if DEBUG
    #define ASSERT(_x) Assert(_x)
#else
    #define ASSERT(_x)
#endif


ASSERT(test);    // Results in null statement in non-debug builds
Run Code Online (Sandbox Code Playgroud)

那个,或者在循环中,你的条件已经包含了每次迭代中需要完成的任何事情.


SLa*_*aks 18

while (*(dst++) = *(src++))
    ;
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 15

在函数结尾处的标签之后(或者更准确地说,在任何块的末尾),例如

void foo(void)
{
    // ...

exit:
    ;
}
Run Code Online (Sandbox Code Playgroud)

  • @steve标签可以出现在任何块的末尾,因此`return`并不总是合适的.一个例子是当你想从内部循环中继续外部循环时的多重嵌套循环(当然,你可以使用`label:continue;}`而不是`label:;}`). (13认同)
  • 我会完全把'return;`代替. (7认同)

zou*_*oul 5

while (somethingWithSideEffects()) ;
Run Code Online (Sandbox Code Playgroud)