отсутствует, но описывает то, что позволяет ANSI C, но он не объясняет, почему ваши учителя сказали вам объявлять переменные в верхней части ваших функций.Объявление переменных в нечетных местах может затруднить чтение вашего кода, что может привести к ошибкам.
Возьмем следующий код в качестве примера.
#include <stdio.h>
int main() {
int i, j;
i = 20;
j = 30;
printf("(1) i: %d, j: %d\n", i, j);
{
int i;
i = 88;
j = 99;
printf("(2) i: %d, j: %d\n", i, j);
}
printf("(3) i: %d, j: %d\n", i, j);
return 0;
}
Как видите, яобъявлено i
дважды.Ну, если быть более точным, я объявил две переменные, обе с именем i
.Вы можете подумать, что это приведет к ошибке, но это не так, потому что две переменные i
находятся в разных областях.Вы можете увидеть это более отчетливо, когда посмотрите на вывод этой функции.
(1) i: 20, j: 30
(2) i: 88, j: 99
(3) i: 20, j: 99
Сначала мы назначим 20 и 30 для i
и j
соответственно.Затем внутри фигурных скобок мы присваиваем 88 и 99. Итак, почему тогда j
сохраняет свое значение, но i
снова возвращается к 20?Это из-за двух разных переменных i
.
Между внутренним набором фигурных скобок переменная i
со значением 20 скрыта и недоступна, но так как мы не объявили новый j
,мы все еще используем j
из внешней области видимости.Когда мы оставляем внутренний набор фигурных скобок, i
, содержащий значение 88, исчезает, и у нас снова появляется доступ к i
со значением 20.
Иногда такое поведение хорошо,в других случаях, может быть, нет, но должно быть ясно, что если вы используете эту функцию C без разбора, вы действительно можете сделать свой код запутанным и трудным для понимания.