Use of null statement in C

27
典型的使用场景有哪些呢?
;

在C语言中?
我知道它基本上是用来跳过编译器期望的表达式,但我只对这种用法的真实世界示例感兴趣。

9
如果你需要一个空语句,我更倾向于使用“{}”,因为这样看起来不太可能是意外的。所以说,“从不”;-) - Steve Jessop
1
{} 在某些情况下并不实用,而分号 ; 则可能更为实用。 - R.. GitHub STOP HELPING ICE
@JanSchultke 问题的范围有些不同。你提出的问题是关于为什么C/C++编译器在遇到空语句时不会给出编译时错误,也就是关于C/C++语言设计背后的原因。而我的问题是关于利用这种语言结构的最佳实际用例。 - undefined
重复目标是一个[语言设计]问题,语言为什么允许这样的问题的答案在于使用案例。这些问题的范围略有不同,但一个问题的答案可能会回答另一个问题,这是判断是否为重复的标准。 - undefined
@JanSchultke 使用语言设计师的用例可能与C/C++编译器用户的用例不重叠。所以,我仍然认为这些是不同的问题,尽管我可能同意部分用例是相匹配的。 - undefined
显示剩余2条评论
13个回答

1
我在想如何将空表达式写入内联if语句,并想到了这个方法。它可以编译并且运行正常。
condition ? x = 1 : "do nothing";

有趣的东西。

0

它更像是一个空表达式而不是一个空语句,但通常在for循环中找到。

for (;;)                 // Loop "forever"

for (int i=10; i--; )    // 9..0

等等


8
从技术上讲,这不是一个空语句。C99的6.8.3定义了空语句为没有表达式的表达式语句,而这是一个for循环语句,其可选表达式少于3个。for循环中括号内的三个内容并不是语句,而是用分号分隔的表达式。这就是为什么你不能写成for(int i=10; i--; {})。我知道这有点挑剔 :-) - Steve Jessop
4
@Steve Jessop,我确实说过这不是一个空语句,但是感谢您提供的额外技术细节。 - ikegami

0

我只在 case 语句以声明开始时使用 null 语句:

switch(x) {
  case 5: ;
    int y = makeValue(z);
    ...
    break;
  ...
}

如果您删除了 case 语句前面的空语句,代码将无法编译。原因是标签不能在声明之前出现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接