Могу ли я писать простоОбъявление и инициализация переменной в цикле для
for (int i = 0; ...
вместо
int i;
for (i = 0; ...
в C или C++?
(И будет переменная i
быть доступны внутри цикла только?)
Могу ли я писать простоОбъявление и инициализация переменной в цикле для
for (int i = 0; ...
вместо
int i;
for (i = 0; ...
в C или C++?
(И будет переменная i
быть доступны внутри цикла только?)
Его действует в 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.
Да и да. Но для C, по-видимому, ваш компилятор должен быть в режиме C99.
Да, это законно на C++ и C99.
Это совершенно законно, чтобы сделать это в C99 или C++:
for(int i=0; i<max; ++i)
{
//some code
}
и его while
эквивалент:
{
int i=0
while(i<max)
{
//some code
++i;
}
}
Петли 'for' и' while' не совсем эквивалентны. Подумайте, что произойдет, если «некоторый код» содержит инструкцию 'continue'. – jamesdlin
Я только уточнял объем 'i'. Вы всегда можете позаботиться о том, чтобы перед тем, как вы назовете 'continue', есть' ++ i', но в противном случае у вас есть действительная точка. – rubenvb
Acutally for(int i=0;i<somevalue;i++)
всегда была пробурена в меня в качестве предпочтительного пути определить цикл for в c и C++.
Поскольку «i» доступно только в вашем цикле, вы должны заботиться об именах переменных, которые вы используете. Если вы объявляете «i» как переменную вне цикла и используете ее для чего-то другого, тогда вы будете создавать проблему при использовании той же переменной для счетчика циклов.
Например:
int i = 10;
i = 10 + PI;
будет автоматически изменен, когда вы попали в цикл и объявить I = 0
Могу ли я писать просто
Да.
(И переменная я доступен внутри только цикл?)
Зависит от компилятора и его версии. AFAIK, в современных компиляторах i доступен только внутри цикла. Некоторые старые компиляторы позволили мне быть доступным вне цикла. Некоторые компиляторы позволяют мне получить доступ за пределами цикла и предупредить вас о нестандартном поведении.
Я думаю (но я не уверен в этом), что «я вне цикла» используется где-то в VC98 (Visual Studio 6, AFAIK, также имели глобально определенный «я» переменную где-то что может привести к чрезвычайно интересному поведению). I думаю, что компиляторы (microsoft) составляли где-то около 2000..2003 начали печатать «нестандартные расширения, используемые» для использования i вне цикла, и в конечном итоге эта функциональность полностью исчезла. Его нет в визуальной студии 2008.
Это, вероятно, произошло по стандарту, но я не могу дать ссылку или ссылку на данный момент.
если вы используете переменную из стороны петлю будет меняться каждый раз, когда вы инициализировать его внутри цикла
int i = 0;
for(int e = 0; e < 10; e++)
{
i = e;
}
теперь я ценю будет меняться каждый раз, когда
Попытка это из, вероятно, потребуется меньше усилий чем опубликовать этот вопрос об этом –
@Don: но дал бы неправильный ответ, если бы вы использовали хрустящий старый предварительный стандартный компилятор (как некоторые люди по-прежнему кажутся). Лучше спросить или посмотреть в стандарте, чем доверять поведению вашего конкретного компилятора. –