Можно просто написать
for (int i = 0; ...
вместо
int i;
for (i = 0; ...
в C или С++?
(И будет ли переменная i
доступна только внутри цикла?)
Можно просто написать
for (int i = 0; ...
вместо
int i;
for (i = 0; ...
в C или С++?
(И будет ли переменная i
доступна только внутри цикла?)
Его действительный в С++
Это не было законным в оригинальной версии C.
Но был принят как часть C в C99 (когда некоторые функции С++ были отформатированы обратно на C)
Использование gcc
gcc -std=c99 <file>.c
Переменная действительна внутри оператора for и оператора, который зацикливается. Если это оператор блока, то он действителен для всего блока.
for(int loop = 0; loop < 10; ++loop)
{
// loop valid in here aswell
}
// loop NOT valid here.
Да, это законно в С++ и на C99.
Это совершенно законно для этого на C99 или С++:
for( int i=0; i<max; ++i )
{
//some code
}
и эквивалент while
:
{
int i=0
while( i<max )
{
//some code
++i;
}
}
Acutally for(int i=0;i<somevalue;i++)
всегда пробуждался во мне как предпочтительный способ определения цикла for в c и С++.
Поскольку "i" доступно только в вашем цикле, вы должны заботиться об именах переменных, которые вы используете. Если вы объявляете "i" как переменную вне цикла и используете ее для чего-то другого, тогда вы будете создавать проблему при использовании той же переменной для счетчика циклов.
Например:
int i = 10;
i = 10 + PI;
будет автоматически изменен, когда вы нажмете цикл for и объявите я = 0
Да и да. Но для C, по-видимому, ваш компилятор должен быть в режиме C99.
Можно просто написать
Да.
(И будет ли переменная я доступна только внутри цикла?)
Зависит от компилятора и его версии. AFAIK, в современных компиляторах я доступен только внутри цикла. Некоторые старые компиляторы позволили мне быть доступным вне цикла. Некоторые компиляторы позволяют мне получить доступ за пределами цикла и предупредить вас о нестандартном поведении.
Я думаю (но я не уверен в этом), что "я за пределами цикла" использовался где-то в VC98 (Visual Studio 6, в котором AFAIK также имела глобально определенную переменную "i" где-то, что могло бы привести к чрезвычайно интересному поведению). Я думаю, что компиляторы (microsoft) составляли где-то около 2000..2003 начали печатать "нестандартные расширения, используемые" для использования я вне цикла, и в конечном итоге эта функциональность полностью исчезла. Его нет в визуальной студии 2008 года.
Это, вероятно, произошло по стандарту, но я не могу дать ссылку или цитату на данный момент.
Если вы используете переменную вне цикла, она будет изменяться каждый раз, когда вы инициализируете ее внутри цикла
int i = 0;
for(int e = 0; e < 10; e++)
{
i = e;
}
теперь значение я будет меняться каждый раз