2014-12-03 159 views
-2
#include<stdio.h> 

int main() 
{ 
    int i=5; 
    while(i--) 
    { 
     printf("%d\n",i); 
    }; 
    printf("Out of loop\n"); 
    return 0; 
} 

此代码正常工作!循环结束处的;不代表什么意思? 所以,即使我们添加它,我们没有任何问题?只是好奇!我认为在循环结束时添加;没有任何意义。在while循环结尾添加`;`

+1

额外的';'是“空语句”的终止。在'}'之后加';;'会添加两个空语句。 – wildplasser 2014-12-03 10:57:33

+0

请注意,在do {/ * code * /} while(/ * condition * /);'中,尾部的';'不是空语句,而是必需的。 – DevSolar 2014-12-03 11:06:20

回答

10

它“有效”,但它是一个空的语句,因此它改变了程序的结构。

考虑一下:

if (foo()) 
    while (bar()) 
    { 
    foo_some_more() 
    } 
else 
{ 
    do_something_about_it(); 
} 

上述工作,因为while是一个单独的语句,因此else依然能够“找到”的if正常。如果在while -loop的右大括号后面添加一个分号,则会破坏该结构并且不再编译。

所以,虽然空的陈述看起来无害,但它们并不是真的应该避免。另外:当然,它们会给代码添加无意义的混淆。

6

这里的;被认为是一个空语句或空语句。

样品

int i = 0;; 

欲了解更多信息,可以检查this问题。

注意事项:不要将此视为拇指规则。有些情况下表示可能出现相同,但它们不是空语句,而是语法的一部分。例如:do..while循环

3

多余的;是一个空的语句,在这个特定的实例中是冗余的。在那里你

一个实例需要使用空语句是在switch到最后的分支,不做任何事:

switch (expression) 
{ 
    case 1: 
     /*Some statements here or empty*/ 
    case 2: 
    ; /*A statement is required between here and the closing brace 
     An empty statement will suffice.*/ 
} 

你应该避免使用多余的空报表;他们可以发出错误(尤其是在重构过程中将代码放在if声明中的情况下),并且较早的编译器会发出抱怨。在宏中使用多余的分号尤其有害。

+0

Errr ...那里需要的分号如何? – DevSolar 2014-12-03 11:05:47

+0

尝试编译没有它;-) – Bathsheba 2014-12-03 11:06:48

+0

暧昧。有这样的事情,作为贯穿案件... – DevSolar 2014-12-03 11:08:51

1

这些都是完美有效的,它们被称为空语句,它们什么都不做。

int main() 
{ 
    ; 
    ; 
    ; 
    ; 
    { 
    } 
    return 0; 
} 
0

正如上面各位用户所述,相关的分号是一个空的语句,没有任何作用。

然而,这是一个稍微不同的故事:

#include <stdio.h> 

int main() 
{ 
    int i=5;  
    while(i--); //<--- Put the semi-colon here and see what you get. 
    { 
     printf("%d\n",i); 
    }  
    printf("Out of loop\n");  
    return 0; 
} 
0
#include<stdio.h> 

int main() 
{ 

    int i=5; 
    while(i--) 
    { 
     printf("%d\n",i); 
    }/*blank statement*/; 
    printf("Out of loop\n"); 
    return 0; 
} 

它只是一个空白的声明。上面的 大括号本身告诉块的结尾,然后它会处理;作为空白页面