C89 и более ранние версии поддерживают только операторы объявления в начале блока (IOW, единственное, что может появиться между открытием {
и объявлением - это другое объявление):
/* C89 and earlier */
int main(void)
{
int x; /* this is legal */
...
for (x = 0; x < 10; x++)
{
int i; /* so is this */
printf("x = %d\n", x);
int j = 2*x; /* ILLEGAL */
}
int y; /* ILLEGAL */
...
}
СC99, операторы объявления могут появляться где угодно, включая управляющие выражения (с оговоркой, что что-то должно быть объявлено перед использованием):
// C99 and later, C++
int main(void)
{
int x; // same as before
...
for (int i = 0; i < 10; i++) // supported as of C99
{
printf("i = %d\n", i);
int j = 2 * i; // supported as of C99
}
int y; // supported as of C99
}
Turbo C предшествует стандарту C99, так что если вы хотите написатькод, как во втором примере, вам нужно будет использовать более современный компилятор.