В соответствии со Стандартом С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++. Появление этой возможности в языке С облегчает написание кода, который можно использовать в средах обоих языков.