为什么以下do-while循环有效?

时间:2014-01-27 19:00:19

标签: c loops do-while

循环如下:

do;
while(1);

为什么上面的循环没有给出语法错误?

我正在使用mingw gcc编译器

5 个答案:

答案 0 :(得分:7)

该代码看起来似乎是为了模糊其含义,但如果我们查看draft C99 standard部分6.8.5 迭代语句,那么do while的语法是:

do statement while ( expression ) ;

语句可以是表达式语句,而表达式语句又可以是{em>空语句,它是;。所以它与:

相同
do
  ;
while(1);

我们可以从6.8.3 部分看到表达式和空语句 3 说:

  

null语句(仅由分号组成)不执行任何操作。

答案 1 :(得分:6)

do
    ; //nop
while(1);

现在它更具可读性:)


请注意,;Null Statement

答案 2 :(得分:2)

这是一个等同于

的语句do-while循环
do
    no_op(); // do nothing
while (1);

do {
}
while (1);

答案 3 :(得分:2)

就个人而言,我讨厌空陈述,我非常乐意将它们从标准中移除。

我首选的表格是

do continue;
while (1);

答案 4 :(得分:1)

因为它是一个带有空语句;的无限循环。

do
{
   ;

}while(1);