2010-07-06 24 views
10

mogę napisać po prostuDeklarowanie i inicjalizacja zmiennej w pętli for

for (int i = 0; ... 

zamiast

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

w C lub C++?

(i będzie zmienna i być dostępne tylko wewnątrz pętli?)

+5

wypróbowanie prawdopodobnie wymagały mniej wysiłku niż umieszczanie tego pytania na ten temat: –

+3

@Don: ale dałby złą odpowiedź, gdybyś użył starego, skorupiastego kompilatora (jak niektórzy wydają się nadal). Lepiej zapytać lub spojrzeć w standard, niż zaufać zachowaniu danego kompilatora. –

Odpowiedz

20

Jego ważne w C++

Nie było legalne w oryginalnej wersji C
Ale została przyjęta jako część C w C99 (gdy niektóre ++ funkcje C zostały rodzaju powrotem przeniesiony do C)
Używanie gcc

gcc -std=c99 <file>.c 

Zmienna jest poprawna wewnątrz instrukcji for i instrukcji zapętlonej. Jeśli jest to instrukcja blokowa, jest ona ważna dla całego bloku.

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

// loop NOT valid here. 
2

tak i tak. Ale dla C najwyraźniej twój kompilator musi być w trybie C99.

18

Tak, jest legalny w C++ i C99.

5

Jest to całkowicie legalne to zrobić w C99 lub C++:

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

i jego while odpowiednikiem jest:

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

Pętle 'for' i' while' nie są do końca równoważne. Zastanów się, co się stanie, jeśli "jakiś kod" zawiera instrukcję "kontynuuj". – jamesdlin

+4

Ja tylko wyjaśniałem zakres "i". Zawsze możesz się upewnić, że istnieje '++ i' zanim zadzwonisz' continue', ale poza tym masz ważny punkt. – rubenvb

3

Acutally for(int i=0;i<somevalue;i++) zawsze wiercić mnie jako preferowany sposób zdefiniuj pętlę for w c i C++.

O ile "i" jest dostępne tylko w Twojej pętli, musisz zadbać o nazwy zmiennych, których używasz. Jeśli zadeklarujesz "i" jako zmienną poza pętlą i użyjesz jej do czegoś innego, to spowodujesz problem przy użyciu tej samej zmiennej dla licznika pętli.

Na przykład:

int i = 10; 
i = 10 + PI; 

zostanie automatycznie zmieniony po trafieniu do pętli i zadeklarować i = 0

2

mogę napisać po prostu

Tak.

(I zmienna będę dostępna tylko wewnątrz pętli?)

Zależy kompilatora i jego wersji. AFAIK, w nowoczesnych kompilatorach i jest dostępny tylko w pętli. Niektóre starsze kompilatory mogą być dostępne również poza pętlą. Niektóre kompilatory pozwalają na dostęp poza pętlą i ostrzegają o niestandardowym zachowaniu.

Imyślę, że (ale nie jestem tego pewien), że "i poza pętlą" był używany gdzieś w VC98 (Visual Studio 6, który AFAIK, miał również globalnie zdefiniowaną zmienną "i" gdzieś może to prowadzić do niezwykle interesującego zachowania). I Myślę, że kompilatory (microsoft) wykonane około 2000..2003 rozpoczęły drukowanie "niestandardowych rozszerzeń używanych" do używania i poza pętlą, i ostatecznie ta funkcjonalność zniknęła całkowicie. Nie ma go w visual studio 2008.

Prawdopodobnie stało się to zgodnie ze standardem, ale nie mogę obecnie podać linku lub cytatu.

0

jeśli używasz zmiennej out The Loop będzie zmieniać za każdym razem, kiedy go zainicjować wewnątrz pętli

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

teraz wartość będzie zmieniać za każdym razem