2010-07-06 84 views
10

初始化变量我能写的声明,并在循环

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

简单

for (int i = 0; ... 

而不是C或C++?

(将变量i是仅环?内访问)

+5

尝试了这一点,将改变或许会需要更少的努力改变每一次比发表这个关于它的问题 – 2010-07-07 16:00:01

+3

@Don:但如果你要使用一个硬标准的旧标准前编译器(就像一些人看起来似的)会给出错误的答案。最好是问一下,或者看看标准,而不是相信你的特定编译器的行为。 – 2010-07-08 00:11:03

回答

20

它在C++

有效的它是不是在C.
的原始版本合法的,但在C99被采纳为C的一部分(在一些C++特征进行排序的向后移植到C)
使用gcc

gcc -std=c99 <file>.c 

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

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

// loop NOT valid here. 
2

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

18

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

5

这是完全合法的,为此在C99或C++:

for(int i=0; i<max; ++i) 
{ 
    //some code 
} 

及其while相当于是:

{ 
    int i=0 
    while(i<max) 
    { 
     //some code 
     ++i; 
    } 
} 
+3

'for'和'while'循环并不完全等价。考虑如果“某些代码”包含“continue”语句会发生什么情况。 – jamesdlin 2010-07-06 19:01:14

+4

我只是澄清'我'的范围。在你打电话给'continue'之前,你总是可以保证有'++ i',否则你有一个有效的点。 – rubenvb 2010-07-06 19:15:54

3

NOTE:事实上for(int i=0;i<somevalue;i++)总是钻到我作为首选方式在c和C++中定义一个for循环。

只有在您的循环中只能访问“我”,您必须关心您使用的变量名称。如果你将“i”声明为循环外部的一个变量,并将它用于别的东西,那么当使用同一个变量作为循环计数器时,你将会导致一个问题。

例如:

int i = 10; 
i = 10 + PI; 

会当你打的for循环自动改变,并宣布我= 0

2

我能写简单的

是。

(将变量i是只在循环里访问?)

取决于编译器和它的版本。 AFAIK,在现代编译器中,我只能在循环内部访问。 一些较早的编译器允许我在循环之外访问。 有些编译器允许我在循环之外访问,并警告你有关非标准行为。(但我不确定),“我在循环之外”在VC98(Visual Studio 6,其中AFAIK,也有一个全局定义的“我”变量的地方这可能会导致一个非常有趣的行为)。我想认为(微软)编译器在2000年左右开始在某个地方开始.2003年开始打印“使用非标准扩展名”以便在循环外使用i,并且最终该功能完全消失。它不存在于visual studio 2008.

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

0

如果使用可变出的圈这将是当你初始化它的内部循环

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

现在,我珍惜每一次