[英]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.