Screenshot 2021-12-08 at 14.42.11.png

Screenshot 2021-12-08 at 14.43.43.png

Screenshot 2021-12-08 at 14.44.12.png

Функция main — точка входа в программу

Screenshot 2021-12-08 at 14.51.09.png

⇒ препроцессирование, трансляция в язык ассемблера, ассемблирование в объектный файл, компоновка

Screenshot 2021-12-08 at 14.52.01.png

Screenshot 2021-12-08 at 14.52.16.png

Screenshot 2021-12-08 at 14.52.29.png

Все переменные, объявленные вне функции main и не помеченные ключевым словом static, оказались глобальными именами

Появились global_x и global_y, но под них по-разному выделяется память (вторая инициализирована, а первая — нет)

static ⇒ объявление переменной не будет экспортироваться в другие единицы трансляции

static int global_z не будет глобальным и не будет видным из других единиц трансляции

register (класс хранения) ⇒ компилятор будет пытаться поместить и хранить переменную на регистре процессора (мы подсказываем транслятору, что лучше положить это в регистр)

static int z (внутри функции main) ⇒ переменная не является автоматической, то есть, не создается и не уничтожается при входе/выходе из функции; для нее выделяется какой-то глобальный участок памяти, как будто она объявлена вне функции; выделенный участок памяти можем увидеть в результирующем выполняемом файле, но это все равно локальное имя, которое не будет видно в других единицах трансляции

Зачем в С ключевое слово auto, если оно никогда не используется?

Видимо, для симметрии с другими классами хранения

Еще мы никогда не будем использовать ключевое слово register, потому что оптимизирующий компилятор сам догадается, что где хранить

Итог: ключевые слова auto и register мы не используем