В языке программирования Си переменные могут принадлежать к различным классам хранения, которые определяют их время жизни и область видимости. Давайте рассмотрим каждый из предложенных вариантов, чтобы определить, какой из них подходит для переменных, которые определяются внутри функций и существуют во время выполнения всей программы.
- Автоматический (auto): Переменные, объявленные внутри функции без явного указания класса хранения, по умолчанию являются автоматическими. Они создаются при входе в функцию и уничтожаются при выходе из нее. Таким образом, они не существуют на протяжении всей программы.
- Регистровый (register): Этот класс хранения также используется для переменных, которые создаются и уничтожаются вместе с функцией, но компилятор может попытаться разместить их в регистрах процессора для ускорения доступа. Однако их время жизни также ограничено временем выполнения функции.
- Внешний (extern): Переменные, объявленные с использованием ключевого слова extern, обычно определяются вне функций и могут быть доступны из разных файлов. Они существуют на протяжении всей программы, но не определяются внутри функций.
- Внутренний статический (static): Переменные, объявленные внутри функции с ключевым словом static, сохраняют свое значение между вызовами функции и существуют на протяжении всей программы. Их область видимости ограничена функцией, в которой они определены.
- Внешний статический (static): Переменные, объявленные вне всех функций с ключевым словом static, имеют область видимости, ограниченную файлом. Они также существуют на протяжении всей программы, но не определяются внутри функций.
Таким образом, переменные, которые определяются внутри функций и существуют во время выполнения всей программы, относятся к внутренним статическим переменным. Они сохраняют свое состояние между вызовами функции и остаются в памяти на протяжении всего выполнения программы.