在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++面向对象程序设计(第二版)>>