繁体   English   中英

这个C代码片段可以编译吗?

[英]Does this snippet of C code compile?

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

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

据他说,这与写作完全相同:

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

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

好吧,你的老师错了。

while循环期望将表达式作为条件。 因此,您不能空白。

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

for(;;) { 

}

C标准在6.8.5节1迭代语句中定义了语法

while(表达式)语句

在(表达式)时做陈述;

for(expressionopt; expressionopt; expressionopt)语句

for(声明; expressionopt; expressionopt)语句

如您所见, 表达式对于while循环不是可选的。 但是对于for循环来说是可选的。

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

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

while()在其()需要一个表达式。

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

C标准6.8.5节说语法是while (expression) statement expression不是可选的。

while ( expression ) statement

如果您的编译器接受第一个程序,则您的编译器有一些额外的功能,使其不符合要求:它不是C编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM