典型的使用场景有哪些呢?
在C语言中?
我知道它基本上是用来跳过编译器期望的表达式,但我只对这种用法的真实世界示例感兴趣。
;
在C语言中?
我知道它基本上是用来跳过编译器期望的表达式,但我只对这种用法的真实世界示例感兴趣。
这通常是被预处理器剥离的代码块的副作用,例如:
#if DEBUG
#define ASSERT(_x) Assert(_x)
#else
#define ASSERT(_x)
#endif
ASSERT(test); // Results in null statement in non-debug builds
那么,或者在循环中,当你的条件已经包含每次迭代需要执行的内容时。Assert(x)
应该替换为 Assert(_x)
,因为 _x
已经被用作参数名称(我无法编辑答案,因为编辑必须至少包含6个字符)。 - vinc17#else
情况,我更愿意使用#define ASSERT(_x) ((void) 0)
,这样当一个人忘记了分号时就会报错,例如:ASSERT(test1) ASSERT(test2);
但在这种情况下,不再有空语句。 - vinc17while (*(dst++) = *(src++))
;
当在函数末尾(或更准确地说,在任何块的末尾)放置一个标签,例如:
void foo(void)
{
// ...
exit:
;
}
return;
完全替换进去。 - Steve Jessopreturn
并不总是适用的。例如,当您想要从内层循环中继续外部循环时,就会出现多层嵌套循环(当然,您也可以使用 label: continue; }
而不是 label: ;}
)。 - Jim Baltercontinue;
而不是 goto label;
。我相信有这样的用途,甚至可能比“我去到某个宏定义的标签,所以在一些特殊情况下无法替换 continue”更少疯狂的用途。只是我想我从未见过这样的情况。 - Steve Jessopcontinue;
将会继续错误的循环。Bliss 语言没有 goto,但是有用于 break/continue 外部循环的循环标签;太遗憾了 C 没有这个功能。 - Jim Balterwhile (somethingWithSideEffects()) ;
我曾经在可能是不寻常的情况下(而且某些/许多人可能会觉得这是错误的)使用过它。有时候我需要编写非常复杂的 if
条件语句,但没有 else
子句,而且必须对 if 条件进行取反。显然它可以像这样:
if ( !( overly complex condition ) )
{
do stuff
}
对我来说,有时候用正逻辑思考可能更加合理。换句话说,如果过于复杂的条件
成立,我不希望代码运行。因此,我改为以下写法:
if ( overly complex condition )
; // do nothing
else
{
do stuff
}
if
。如果删除 !( )
,它仍然会很复杂。 - ikegami例子:
while (!kbhit())
;
有一个有点不寻常的用法——但我真的很欣赏空语句的存在——就是当我有两个条件和两个动作时,我发现我可以最自然地这样表达:
if(condition1)
/* do nothing */ ;
else if(condition2)
do_something;
else do_something_else;
condition1
测试一切是否正常,但如果不是,则condition2
区分两种不同的异常操作:do_something
和do_something_else
。condition1
:if(!condition1 && condition2)
do_something;
else if(!condition1)
do_something_else;
但这似乎不够优雅,因为它重复了condition1
。或者可以使用嵌套的if
语句:
if(!condition1) {
if(condition2)
do_something;
else do_something_else;
}
但是当然,嵌套的if
语句也很容易过于复杂和晦涩难懂。因此,我通常更喜欢第一种版本,使用null语句。
一款符合标准的编译器的单元测试。
我可以想到的是对 scanf
的验证。当用户没有提供正确的输入时,scanf
会卡住。因此,为了防止 scanf
被卡住,必须删除直到行尾的字符。
if( scanf("%d",&integer) == 0 )
{
while( getchar() != '\n' ) ;
// ....
}
while(a[i--]);
2- 在标签结尾处,不需要执行任何操作。例如:Label: ;
{}
在某些情况下并不实用,而分号;
则可能更为实用。 - R.. GitHub STOP HELPING ICE