2

我知道这是一个愚蠢的问题,但我只是出于好奇而问这个问题。我刚刚在某处读到了这段代码:

#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 编译器中执行一次,而在 gcc 中不工作,但是这个循环怎么可能执行一次呢?

如果有的话,您能否指导我了解该代码在 Turbo C 编译器中的异常行为?

4

2 回答 2

1

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

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

鉴于表达式 2 的计算结果为假,代码不应打印任何输出。

于 2013-09-21T16:02:08.680 回答
1

TurboC 不遵循C99标准。这可以解释异常行为。请放心,gcc 将为您提供正确的输出。

于 2013-09-21T16:02:42.913 回答