C语言中的空语句是什么?

3

我希望知道在C编程语言中,什么是空语句?并且解释一下它的典型用法。

我找到了以下这段代码。

for (j=6; j>0; j++)
;

而且
for (j=6; j>0; j++)

一个例子可能是 while (1 == 1) ;,它会一直循环不做任何事情。例如,在一个线程中使用它,你不想终止该线程,该线程可能会继续处理接收到的消息、处理中断或由其他进程调用其回调函数。 - Mawg says reinstate Monica
1
关闭——不清楚?噫。好吧,问题显示缺乏调查,但这并不能用错误的理由来关闭它。 - Joshua
可能是 C语言中使用空语句的用法 的重复问题。 - Cody Gray
6个回答

12

来自msdn页面:

"null语句"是一个表达式语句,其中表达式缺失。当语言的语法需要语句但不需要表达式计算时,它非常有用。它由分号组成。

空语句通常用作迭代语句中的占位符或作为复合语句或函数末尾放置标签的语句。

了解更多:https://msdn.microsoft.com/en-us/library/1zea45ac.aspx


当你想要在字符串中找到某个字符的第一次出现的索引时,可以使用它,并且解释一下它的典型用法。
int a[50] = "lord of the rings";
int i;

for(i = 0; a[i] != 't'; i++)
    ;//null statement
//as no operation is required

我在if语句中使用if(a);时收到了警告,建议加上大括号来包含空的代码块,但是如果我使用if(a){},就不会收到警告。这两者有什么区别? - Rajesh

6

空语句是一种不执行任何操作但出现在语法上的语句。

while ((*s++ = *t++))
    ; /* null statement */

在这种情况下,空语句提供了 while 循环的主体部分。
或者(免责声明:糟糕的代码)。
if (condition1)
    if (condition2)
        dosomething();
    else
        ; /* null statement */
else
    dosomethingelse();

在这种情况下,内部的else和null语句使外部的else无法与内部的if绑定。

4
从C11开始,§6.8.4.1, 6.8.3 表达式和空语句

一个空语句(只包含分号)不执行任何操作。

标准还提供了它的一些常见用法:

EXAMPLE 2 In the program fragment

      char *s;
      /* ... */
      while (*s++ != '\0')
              ;

a null statement is used to supply an empty loop body to the iteration statement.

6 EXAMPLE 3 A null statement may also be used to carry a label just before the closing } of a compound statement.

      while (loop1) {
            /* ... */
            while (loop2) {
                    /* ... */
                    if (want_out)
                            goto end_loop1;
                    /* ... */
            }
            /* ... */
      end_loop1: ;
      }

0
无论是C还是Java,null都具有特殊意义。 每当需要将变量的值重新初始化时,null就会发挥作用。
如果有一个字符串i,并且我们想通过循环添加一个char值,那么首先我们必须使用null对i进行初始化。

OP的问题是关于null语句,而不是null关键字,你的回答似乎是针对后者的。 - Adrian Mole

0
有时候空语句很有用。在“旧日子”里,数学硬件可能无法返回你所需的整数值,例如将0.999...作为sin(pi / 2)(即sin(90度))返回。
int i, j, k;
i = something;
for(j = 1; (2 * j) <= i; j *= 2);

计算小于i的最大2的整数次幂。对于大的i来说不是很高效,但如果您不能信任Log函数返回一个精确的整数值,则非常有用。

我的C++编译器不接受空语句作为函数体,但接受“空语句块”“{}”。


0

一个空语句并不会执行任何操作,因此只有一个 ';'

所以......在C/C++中,这个代码块将不会执行10次

for(int i = 0; i < 10; i++){//execute the following 10 times
   ;//nothing aka "null statement"
}//end for

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