代码之家  ›  专栏  ›  技术社区  ›  Himanshu Aggarwal

C: Turbo C编译器中for循环的异常行为

  •  2
  • Himanshu Aggarwal  · 技术社区  · 11 年前

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

    #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编译器中有此代码的异常行为,你能为我提供指导吗?

    2 回复  |  直到 11 年前
        1
  •  1
  •   Filipe Gonçalves    11 年前

    这是编译器中的一个错误。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. [...]
    

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

        2
  •  1
  •   Stratocastr    11 年前

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