2010-07-06 222 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; 
} 

現在,我珍惜每一次