这段C代码是否可以编译?

时间:2015-12-21 16:56:55

标签: c while-loop

我的C编程老师声称这是C中while循环的正确声明。

int main(int argc, char *argv[])
{
    while()
    {
        fork();
    }
}

据他说,这跟写作完全一样:

int main(int argc, char *argv[])
{
    while(1)
    {
        fork();
    }
}

'while()'代码是否可以在任何C标准中编译?

4 个答案:

答案 0 :(得分:9)

嗯,你的老师错了。

while循环期望表达式作为条件。所以你不能把它留空。

这与for循环略有不同,但条件可以为空:

for(;;) { 

}

C标准定义了§6.8.5,1迭代语句

中的语法
  

while(表达式)语句

     

做语句while(表达式);

     

for(expressionopt; expressionopt; expressionopt)statement

     

for(declaration; expressionopt; expressionopt)statement

正如您所看到的,表达式对于while循环而言不是是可选的。但它是for循环的可选项。

答案 1 :(得分:1)

while()代码不起作用。当你尝试编译时,你可以看到原因。您将得到的错误如下,

test1.c:7:11: error: expected expression before ‘)’ token
 while()
       ^

while()需要在()内添加表达式。

答案 2 :(得分:1)

循环需要有关何时执行的条件。所以不,你的老师可能已经喝醉了

答案 3 :(得分:0)

C Standard, section 6.8.5表示语法为while (expression) statementexpression不是可选的。

while ( expression ) statement

如果您的编译器接受第一个程序,那么您的编译器会有一些额外的东西使它不符合要求:它不是C编译器。