2010-07-06 3 views
10

Могу ли я писать простоОбъявление и инициализация переменной в цикле для

for (int i = 0; ... 

вместо

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

в C или C++?

(И будет переменная i быть доступны внутри цикла только?)

+5

Попытка это из, вероятно, потребуется меньше усилий чем опубликовать этот вопрос об этом –

+3

@Don: но дал бы неправильный ответ, если бы вы использовали хрустящий старый предварительный стандартный компилятор (как некоторые люди по-прежнему кажутся). Лучше спросить или посмотреть в стандарте, чем доверять поведению вашего конкретного компилятора. –

ответ

20

Его действует в C++

Это не допускалось в оригинальной версии C.
Но был принят в качестве части C в C99 (когда некоторые особенности 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

+4

Я только уточнял объем 'i'. Вы всегда можете позаботиться о том, чтобы перед тем, как вы назовете 'continue', есть' ++ i', но в противном случае у вас есть действительная точка. – rubenvb

3

Acutally for(int i=0;i<somevalue;i++) всегда была пробурена в меня в качестве предпочтительного пути определить цикл for в c и C++.

Поскольку «i» доступно только в вашем цикле, вы должны заботиться об именах переменных, которые вы используете. Если вы объявляете «i» как переменную вне цикла и используете ее для чего-то другого, тогда вы будете создавать проблему при использовании той же переменной для счетчика циклов.

Например:

int i = 10; 
i = 10 + PI; 

будет автоматически изменен, когда вы попали в цикл и объявить I = 0

2

Могу ли я писать просто

Да.

(И переменная я доступен внутри только цикл?)

Зависит от компилятора и его версии. AFAIK, в современных компиляторах i доступен только внутри цикла. Некоторые старые компиляторы позволили мне быть доступным вне цикла. Некоторые компиляторы позволяют мне получить доступ за пределами цикла и предупредить вас о нестандартном поведении.

Я думаю (но я не уверен в этом), что «я вне цикла» используется где-то в VC98 (Visual Studio 6, AFAIK, также имели глобально определенный «я» переменную где-то что может привести к чрезвычайно интересному поведению). I думаю, что компиляторы (microsoft) составляли где-то около 2000..2003 начали печатать «нестандартные расширения, используемые» для использования i вне цикла, и в конечном итоге эта функциональность полностью исчезла. Его нет в визуальной студии 2008.

Это, вероятно, произошло по стандарту, но я не могу дать ссылку или ссылку на данный момент.

0

если вы используете переменную из стороны петлю будет меняться каждый раз, когда вы инициализировать его внутри цикла

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

теперь я ценю будет меняться каждый раз, когда

Смежные вопросы