3

我遇到了以下问题:

以下 for 循环将运行多少次 -

for(;0;)
 printf("hello");

我执行并运行了 1 次。我无法理解如何?

4

5 回答 5

5

这甚至不会执行 1 次。我猜你的编译器不好?

行。我认为您正在使用 Turbo C ;-)

编辑:

来自 C99 标准:

6.8.5.3 for 语句 1 语句

for ( clause-1 ; expression-2 ; expression-3 )

语句的行为如下: 表达式 expression-2 是在每次执行循环体之前计算的控制表达式。每次执行循环体后,表达式 expression-3 被评估为 void 表达式。如果clause-1 是一个声明,它声明的任何变量的范围是声明的其余部分和整个循环,包括其他两个表达式;它在控制表达式的第一次评估之前按照执行顺序到达。如果 Clause-1 是一个表达式,它在控制表达式的第一次评估之前被评估为一个 void 表达式。134)

它清楚地表明在执行循环之前首先评估条件。任何符合标准的编译器都不应该执行循环for(;0;) {}一次。

于 2012-06-15T10:00:18.393 回答
5

您在此处复制的代码不是真正的 .c 文件中的代码,或者您的编译器有问题。

也许你有一个额外的分号?:for(;0;); printf("!"); 将打印一次。

于 2012-06-15T10:00:31.867 回答
1

for 循环定义为:

for(startExpression; testExpression; countExpression)
{
    block of code;
}
  • startExpression 在代码之前被评估;
  • testExpression 在代码之前被评估;
  • countExpression 在代码之后计算;

解码:

for(;0;)

方法

  • 没有开始表达
  • testExpression 评估为假,因此循环退出。

编辑以显示正确的循环解码。

于 2012-06-15T10:16:15.047 回答
0

上面写的代码永远不会进入for循环。

检查 ideone链接上的代码。

我不是你在你的源代码中拥有的,你可能;for没有注意到它的情况下输入了一个:

for(;0;);
printf("hello");

在这种情况下,您的程序将打印“hello”。

于 2012-06-15T10:03:53.697 回答
0

由于表达式为 0,因此它被认为是假的。因此,在这种情况下,循环运行 0 次。

于 2012-06-15T10:09:25.147 回答