for语句中声明变量

 

在C语言中,局部变量应该在函数的可执行语句之前定义,但在C++中变量可在任何语句位置定义,只要允许程序语句的地方,都允许定义变量。

在C99标准中C同C++一样允许在for循环语句中定义变量。并且这个变量作用域被限定在for循环中,在for循环外就成为了未定义变量(C++也是)。

※GCC下编译时需要加上std选项,例如 gcc example.c -std=c99

看一段程序,在for语句中声明了变量i 和 k,(允许在for循环语句中定义变量:指的是程序中i和k这2种形式

这一段程序只有在 Microsoft Visual C++ 6.0 才能编译通过,

在Microsoft Visual Studio 2008 和 GCC 下都是报错的,原因是printf 2行中i和k是未定义的。

//define_variable_in_for.c(pp)

#include <stdio.h>


int main(void)
{
    int n = 1;

    for (int i = 0; i < 10; i++)
    {
        int k;
        n = n * i;
        k = i;
    }//i 和 k 的作用域到此结束(ISO Standard)
    
    printf("i = %d
", i);//Only Microsoft Visual C++ 6.0 
    printf("k = %d
", k);//Only Microsoft Visual C++ 6.0 

    return 0; 
}
//n 的作用域到此结束

Microsoft Visual C++ 6.0 下能编译通过的原因是其扩大了for循环中定义的变量的作用域,作用域扩大至下一个"}",

不知道这是一个BUG还是有意为之。

---------------------------------------------------------------------------------------------------
参考资料:
<<C++面向对象程序设计(第二版)>>

原文地址:https://www.cnblogs.com/LubinLew/p/define_variable_in_for.html