在for循环中声明和初始化变量

我可以写简单吗?

for (int i = 0; ... 

代替

 int i; for (i = 0; ... 

在C或C ++?

(并且变量i只能在循环中访问吗?)

它在C ++中有效

在C的原始版本中它不合法。
但是在C99中作为C的一部分被采用(当一些C ++特性被反向移植到C时)
使用gcc

 gcc -std=c99 .c 

该变量在for语句和循环语句中有效。 如果这是一个块语句,则它对整个块有效。

 for(int loop = 0; loop < 10; ++loop) { // loop valid in here aswell } // loop NOT valid here. 

是的,它在C ++和C99中是合法的。

在C99或C ++中执行此操作是完全合法的:

 for( int i=0; i 

它的等价物是:

 { int i=0 while( i 

实际上for(int i=0;i总是作为在c和c ++中定义for循环的首选方法。

至于“i”只能在循环中访问,您必须关心您使用的变量名称。 如果将“i”声明为循环外的变量并将其用于其他内容,则在将相同的变量用于循环计数器时会导致问题。

例如:

 int i = 10; i = 10 + PI; 

当你点击for循环并声明i = 0时,它会自动更改

是的,是的。 但是对于C,显然你的编译器需要处于C99模式。

我可以写简单吗?

是。

(并且变量我只能在循环中访问吗?)

取决于编译器及其版本。 AFAIK,在现代编译器中,我只能在循环内部访问。 一些较旧的编译器也允许我在循环之外访问。 有些编译器允许在循环外部访问i并警告您非标准行为。

认为 (但我不确定),“我在循环之外”是在VC98的某个地方使用的(Visual Studio 6,其中AFAIK也有一个全局定义的“i”变量,可能导致极端有趣的行为)。 我认为 (微软)编译器大约在2000年左右开始编写。2003年开始打印“非标准扩展使用”在循环外使用i,最终这个function完全消失了。 它在visual studio 2008中不存在。

这可能是根据标准发生的,但我现在无法给出链接或引用。

如果你在循环中使用变量,那么每次在循环中初始化它时它都会改变

 int i = 0; for(int e = 0; e < 10; e++) { i = e; } 

现在我的价值每次都会改变