Автоматические (локальные) переменные
Некоторые функции нуждаются в собственных переменных и константах. В качестве примера снова рассмотрим проблему временной остановки вывода информации на экран монитора. Можно приостановить вывод, используя следующие инструкции:
printf("Для продолжения нажмите любую клавишу");move_on = getchar();Если вывод информации на экран во время выполнения программы надо приостанавливать несколько раз, выполняющие это действие инструкции помещают в отдельную функцию. Каждый раз, когда возникает необходимость притормозить вывод, достаточно просто вызвать соответствующую функцию. Так как getchar() возвращает значение, переменную, принимающую его, можно определить внутри функции pause():
pause() { intmove_on; printf("Для продолжения нажмите любую клавишу"); move_on = getchar(); return(0); }В данном случае переменная move_on является составной частью функции pause(). Переменную, которая определена внутри функции, принято называть локальной переменной для этой функции. Локальную переменную можно использовать только внутри той функции, где она была определена. В языке Си переменные такого типа обычно называют автоматическими.
Задумайтесь над этим. Если вы определили переменную внутри какой-либо функции, то эта переменная имеет смысл только для данной функции. Сказанное справедливо и для переменных, определенных в функции main(). Посмотрите на программу
main() { intmove_on; puts("Сообщения заполняют экран\n");/*Здесь будет серия сообщений, которые заполнят экран*/ pause(); } pause() { printf("Для продолжения нажмите любую клавишу"); move_on = getchar(); return(0); }При компиляции этой программы будет выдано сообщение об ошибке, так как функция pause() не может использовать переменную move_on. Ведь она определена внутри main(), а поэтому является локальной для main() и только внутри этой функции имеет смысл и может быть использована. Для того чтобы переменная move_on могла быть использована в функции pause(), следует определить ее внутри именно этой функции.
Рис.4. Автоматические переменные могут иметьодно и то же имя в разных функциях
Вследствие того, что автоматические переменные имеют смысл только внутри собственной функции, можно использовать одно и то же имя переменной в разных функциях. На рис.4 продемонстрирована переменная с именем age, которая определена и в функции main(), и в функции spouse(). Каждая переменная является автоматической (или локальной) для той функции, где ее определили, так что на самом деле в программе присутствуют две переменные с одинаковым именем. Каждая из них имеет собственное значение, которое хранится в различных элементах памяти. Компилятор определяет, значение какой из переменных age должно быть отображено на экране, на основании того, в какой из функций помещена инструкция printf();. Выполняя функцию printf(), помещенную внутри spouse(), программа отобразит значение переменной age, определенной внутри этой функции. При выполнении инструкции printf(), помещенной внутри функции main(), она будет иметь дело с переменной age, определенной в main(). Таким образом, компилятор поддерживает одновременно две переменные с именем age.