Где можно и нельзя объявлять новые переменные в C?

Я слышал (вероятно, от учителя), что нужно объявлять все переменные поверх программы / функции, и что объявление новых среди операторов может вызвать проблемы.

Но потом я читал K&R и наткнулся на следующее предложение: «Объявления переменных (включая инициализации) могут следовать за левой фигурной скобкой, которая вводит любой составной оператор, а не только тот, который начинает функцию». Он приводит пример:

if (n > 0){
    int i;
    for (i=0;i<n;i++)
    ...
}

Я немного поиграл с концепцией, и она работает даже с массивами. Например:

int main(){
    int x = 0 ;

    while (x<10){
        if (x>5){
            int y[x];
            y[0] = 10;
            printf("%d %d\n",y[0],y[4]);
        }
        x++;
    }
}

Итак, когда именно мне нельзя объявлять переменные? Например, что, если объявление моей переменной расположено не сразу после открывающей скобки? Как здесь:

int main(){
    int x = 10;

    x++;
    printf("%d\n",x);

    int z = 6;
    printf("%d\n",z);
}

Может ли это вызвать проблемы в зависимости от программы / машины?

73
задан Daniel Scocco 12 December 2011 в 12:10
поделиться