Ответ 1
for (int i = 0; ...)
- это синтаксис, который был введен в C99. Чтобы использовать его, вы должны включить режим C99, передав -std=c99
(или некоторый более поздний стандарт) в GCC. Версия C89:
int i;
for (i = 0; ...)
ИЗМЕНИТЬ
Исторически, язык C всегда заставлял программистов объявлять все переменные в начале блока. Так что-то вроде:
{
printf("%d", 42);
int c = 43; /* <--- compile time error */
необходимо переписать как:
{
int c = 43;
printf("%d", 42);
блок определяется как:
block := '{' declarations statements '}'
C99, С++, С# и Java разрешают объявление переменных в любом месте блока.
Настоящая причина (угадывание) заключается в распределении внутренних структур (например, вычислении размера стека) ASAP при анализе источника C, без перехода на другой проход компилятора.