https://www.youtube.com/watch?v=G_jcBrrYPAs&t=1108s

Сборка С/С++ программ

Единицы трансляции (translation unit) - сущность формируемая precrocessor, компилируя их мы получаем объектные файлы.

Что такое объявление и определение

Linkage

Второй пример (a'.cpp) не соберется из-за static, т.к. это изменит линковку функции, и она будет видна только в своей единице трансляции.

Всего в C++ есть 3 вида linkage:

External - доступна во всех единицах трансляции.

Internal - только в текущей трансляции.

No - только в текущей области видимости.

Storage Duration

В первом случаем переменная всегда будет 0, во втором же переменная проинициализируется в первый раз 0 и память под нее будет выделена в начале программы, а далее все время будет "жить" и хранить значение.