2016-11-05 37 views
-1

我想确切地知道,C语言中的空语句是什么?并解释一下它的典型用法。什么是C中的空语句?

我发现了以下代码段。

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

而且

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

一个例子可能是'while(1 == 1);'它永远循环无用。例如,在一个你不想终止的线程中使用它,这个线程可能会继续处理它接收到的消息,或者hanldle中断,或者让它的回调函数被其他进程调用。 – Mawg

+1

已关闭 - 不清楚? Booo。好,所以这个问题显示缺乏研究,但没有理由用不正确的理由关闭它。 – Joshua

+0

[在C中使用空语句]的可能重复(http://stackoverflow.com/questions/5599380/use-of-null-statement-in-c) –

回答

4

MSDN页:

“空声明” 是表达缺少一个表达式语句。当语言的语法要求声明而不是表达式评估时,这很有用。它由分号组成。

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

了解更多: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 
0

空语句不DO任何东西,因此,独唱“;'

左右....这个代码块会什么都不做10倍的C/C++

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

一个空语句是什么都不做声明,但存在语法的原因。

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

在这种情况下,null语句提供了while循环的主体。

或(免责声明:糟糕的代码)

if (condition1) 
    if (condition2) 
     dosomething(); 
    else 
     ; /* null statement */ 
else 
    dosomethingelse(); 

在这种情况下,内部和其他空语句保持外其他绑定到内如果。

1

从C11,§6.8.4.1, 6.8.3 Expression and null statements

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

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

实施例2在该程序片段

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

空语句用于一个空的循环体供应到所述迭代 声明。

6示例3空语句也可用于在复合语句关闭前携带标签 。

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

有时,空语句服务。在“过去的日子”里,数学硬件在你需要一个硬件时可能不会返回一个整数值,例如返回0.999 ...作为sin(pi/2)(即sin(90度))。

int i, j, k; 
i = something; 
for(j = 1; (2 * j) <= i; j *= 2); 

在j中计算最大整数幂小于i。如果你不能相信日志函数返回一个确切的整数值,那么对于大型我来说效率不是很高,但很有用。

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