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