在while循环结束时添加一个`;`

时间:2014-12-03 10:54:44

标签: c

#include<stdio.h>

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

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

6 个答案:

答案 0 :(得分:10)

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

考虑一下:

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

由于while是单个语句,因此上述工作正常,因此else仍然能够正确“找到”if。如果在while - 循环的右括号之后添加分号,则会破坏该结构并且不再编译。

所以,虽然空话可能看起来无害,但事实并非如此,他们真的应该避免。另外:当然,它们会给代码增加无意义的混淆。

答案 1 :(得分:6)

这里的;被视为空语句或空语句。

示例

int i = 0;;

有关详情,请查看this问题。

谨慎之言:不要将此视为拇指规则。在某些情况下,表示可能出现相同,但它们不是空语句,而是语法的一部分。示例:do..while循环

答案 2 :(得分:4)

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

使用空语句的一个实例是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语句中),而较旧的编译器会抱怨。在宏中使用过量的分号特别有害。

答案 3 :(得分:1)

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

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

答案 4 :(得分: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;   
}

答案 5 :(得分:0)

#include<stdio.h>

int main()
{

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

它只是一个空白的陈述。 以上大括号本身告诉块的结束,那么它会对待;作为空白的一部分