В соответствии со Стандартом С89 все объявления, находящиеся внутри блока, должны предшествовать первому оператору кода. Но к Стандарту С99 это правило не относится. Рассмотрим, например, программу
#include <stdio.h>
int main(void)
{
int i;
i = 10;
int j; / неправильно для С89; допустимо для С99 и C++
j = i;
printf("%d %d", i, j);
return 0;
}
Здесь выражение
i = 10
находится между двумя объявлениями: переменной i и переменной j. Стандарт С89 такое не разрешает. Зато это вполне допускается в С99 (да и в C++ тоже). Возможность распределять объявления и код довольно широко используется в языке C++. Появление этой возможности в языке С облегчает написание кода, который можно использовать в средах обоих языков.