Когда вы говорите об информировании других читателей, рассматривайте сам компилятор как читателя. Если переменная объявлена static
, это может повлиять на степень оптимизации.
Переопределить переменную static
как extern
невозможно, но компилятор (как обычно) даст вам достаточно веревки, чтобы повеситься.
Если я напишу static int foo;
в одном файле и int foo;
в другом, они считаются разными переменными , несмотря на то, что имеют одинаковые имя и тип - компилятор не будет жаловаться, но вы, вероятно, получите очень позже запутался, пытаясь прочитать и / или отладить код. (Если я напишу extern int foo;
во втором случае, ссылка не будет установлена, если я не объявлю нестатический int foo;
где-то еще.)
Глобальные переменные редко появляются в заголовочных файлах, но когда они это делают, они должны быть объявлены extern
. В противном случае, в зависимости от вашего компилятора, вы рискуете, что каждый исходный файл, который включает этот заголовок, объявит свою собственную копию переменной: в лучшем случае это вызовет сбой ссылки (символ с множественными определениями) и в худшем случае несколько запутанных случаев затенения.