2013-09-21 28 views
2

我知道这是一个愚蠢的问题,但我只是出于好奇而问这个问题。 我刚刚看了这段代码的地方:C:Turbo C编译器中for循环的不寻常行为

#include<stdio.h> 
int main() { 
    for (; 0 ;) 
     printf("This code will be executed one time."); 
    return 0; 
} 

输出:

This code will be executed one time. 

这个循环在Turbo C编译器执行一次,而不是在海湾合作委员会的工作,但是这怎么可能,这个循环中执行,甚至一次?

能否请你指导我在Turbo C编译器中这段代码的不寻常行为,如果有的话?

+0

看起来像Turbo C中的一个bug对我来说。 – Barmar

+0

我感觉一样。 –

+1

这是Turbo C编译器自去年10年以来的一个错误。 (我注意到10年前)另外,正如我记得如果你使用'i = 0'并且写for for循环为'for(; i;)'它将表现正确给它一个尝试! –

回答

1

这是编译器中的一个错误。 C99标准描述了这样的循环:

The statement 

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

behaves as follows: The expression expression-2 is the controlling expression 
that is evaluated before each execution of the loop body. 
The expression expression-3 is evaluated as a void expression after each 
execution of the loop body. [...] 

鉴于expression-2的计算结果为false,代码应该不打印输出。

1

TurboC不遵循C99标准。这可以解释这种不寻常的行为。确信,gcc会给你正确的输出。

+2

这不是特定于C99,我不认为它甚至跟随K&R。 – Barmar