Разница между static и extern при объявлении глобальных переменных в C++ заключается в том, что каждое из этих ключевых слов даёт символу определённое связывание: 2
- static. 24 Ограничивает область видимости переменной только текущим модулем. 1 Для определённых таким образом имён применяется внутренняя компоновка — они являются локальными в модуле, где определены. 4
- extern. 24 Позволяет компоновщику видеть символ при обработке других единиц трансляции. 2 Для имён глобальных переменных и функций, определённых с помощью extern, применяется внешняя компоновка. 4
Таким образом, static делает переменную локальной в текущем файле, а extern — позволяет обращаться к ней из другого файла. 3