Когда мы объявляем любую глобальную переменную, напримерПочему класс хранения глобальных переменных в C неявно определяется как «extern»?
int x;
это эквивалентно
extern int x;
Теперь по умолчанию глобальные переменные инициализируются в 0 компилятором, что означает, что они выделяются память. Но если я просто напишу
extern int x;
тогда это только объявит переменную, в то время как память не будет выделена. Итак, мой запрос заключается в том, что если я напишу extern до int x
или я его не пишу, в случае глобальных переменных, как компилятор обрабатывает их по-разному? В случае, когда я просто пишу int x
, он выделяет память и одновременно ставит extern до int x
, тогда как в случае, когда я пишу extern int x
, он объявляет только переменную, в то время как память не выделяется. Просьба пояснить, как работает компилятор в обоих направлениях.
'int x;' не эквивалентен 'extern int x;' (вы, кажется, признаете это в своем последнем абзаце) –
Вопрос в том, почему вы считаете, что глобальная переменная объявлена как 'extern'? –