2016-11-04 2 views
2

Я изучал язык программирования ANSI C, и он говорит во введении:Являются ли глобальные переменные переменными C?

«Локальные переменные обычно« автоматически »или создаются заново при каждом вызове».

Я предполагаю, что выделение и освобождение переменных работают с логикой фрейма стека java. Так же глобальные переменные автоматические тоже? Они попали бы и вышли из фрейма стека намного меньше, чем локальные переменные, так как они входят в объем всего файла .c. Я не знаю, как работает объем переменных, которые вы вызываете из других файлов.

+0

глобальные переменные имеют фиксированный адрес, они не являются автоматическими. Они выделяются в начале программы и остаются таким образом в течение всего исполнения. –

+0

Нет. Объекты области видимости имеют статическую продолжительность хранения. – EOF

+2

Нет: переменные, определенные внутри функции без ключевых слов 'static' или' register' (или 'extern'), являются переменными' auto'. Теоретически они могут иметь префикс ключевого слова 'auto'. Вы должны быть застрелены, если вы действительно добавите ключевое слово (свидетель C++ полностью принял его за совершенно другую цель) - и если вы встретите ключевое слово в произведении C, вы должны взять человека, который написал 'auto' вне пролить и заставить их покаяться в своих злых путях. –

ответ

2

Нет, эти понятия не играют друг с другом. Термин глобальная переменная является неформальным понятием, которое относится к переменным с внешней связью. По определению, автоматические переменные не имеют связи, поэтому нет смысла иметь переменную, которая является автоматической и глобальной.

+0

Стоит отметить, что еще одно различие между глобальными и локальными - это то, что глобальные переменные нулевые инициализируются default, если я не ошибаюсь, в то время как locals инициализируются по умолчанию, что для примитивных типов подразумевает неопределенное значение. –

+1

@ Peregring-lk: Правильно о глобалях. Дело для местных жителей более сложно, поскольку существуют спецификаторы класса хранения. Например, локальные переменные с ключевым словом 'static' также инициализируются нулями. OTOH, автоматические переменные (те, у которых есть неявный 'auto'-спецификатор) не имеют никакой неявной инициализации - они неопределены, пока значение не будет назначено явно. –

Смежные вопросы