С99 расширяет возможности цикла for, разрешая объявление одной или нескольких переменных в части инициализации цикла. Область видимости переменной, объявленной таким способом, ограничена блоком программы, управляемым выражением for. To есть переменная, объявленная внутри цикла for, будет локализована внутри этого цикла. Эта возможность появилась в языке С потому, что управляющая переменная цикла for часто необходима только внутри этого цикла. А так как эта переменная локализована внутри цикла, то удается избежать ненужных побочных эффектов.
Вот пример, в котором переменная объявляется в части инициализации цикла for:
#include <stdio.h>
int main(void)
{
/ объявить i внутри for
for(int i=0; i < 10; i++)
printf("%d ", i);
return 0;
}
Здесь переменная i объявляется внутри цикла for, а не до начала его работы.
Как уже говорилось, переменная, объявленная внутри цикла for, локализуется внутри этого цикла. Проанализируйте следующую программу. Обратите внимание, что переменная i объявляется дважды: в начале main() и внутри цикла for.
#include <stdio.h>
int main(void)
{
int i = -99;
/ объявить i внутри for
for(int i=0; i < 10; i++)
printf("%d ", i);
printf("\n");
printf("Значение i равно: %d", i); / выводит -99
return 0;
}
Эта программа выводит следующее:
0 1 2 3 4 5 6 7 8 9
Значение i равно -99
Как показывает вывод, как только заканчивается цикл for, заканчивается и область видимости переменной i, объявленной внутри этого цикла. Таким образом, последнее выражение printf() выводит -99, то есть значение i, объявленное в начале main().
Возможность объявлять управляющие переменные внутри цикла for, уже довольнотаки долгое время имеется в языке C++, и теперь такая возможность используется достаточно широко. Есть надежда, что большинство С-программистов будут делать то же самое.