Функция main — точка входа в программу
⇒ препроцессирование, трансляция в язык ассемблера, ассемблирование в объектный файл, компоновка
Все переменные, объявленные вне функции main и не помеченные ключевым словом static, оказались глобальными именами
Появились global_x и global_y, но под них по-разному выделяется память (вторая инициализирована, а первая — нет)
static ⇒ объявление переменной не будет экспортироваться в другие единицы трансляции
static int global_z не будет глобальным и не будет видным из других единиц трансляции
register (класс хранения) ⇒ компилятор будет пытаться поместить и хранить переменную на регистре процессора (мы подсказываем транслятору, что лучше положить это в регистр)
static int z (внутри функции main) ⇒ переменная не является автоматической, то есть, не создается и не уничтожается при входе/выходе из функции; для нее выделяется какой-то глобальный участок памяти, как будто она объявлена вне функции; выделенный участок памяти можем увидеть в результирующем выполняемом файле, но это все равно локальное имя, которое не будет видно в других единицах трансляции
Зачем в С ключевое слово auto, если оно никогда не используется?
Видимо, для симметрии с другими классами хранения
Еще мы никогда не будем использовать ключевое слово register, потому что оптимизирующий компилятор сам догадается, что где хранить
Итог: ключевые слова auto и register мы не используем