Глобальные переменные в заголовочном файле - PullRequest
0 голосов
/ 12 октября 2019

Мне было просто интересно, если вы объявите переменную в заголовочном файле, как этот

const static int START = 0; 

, будет ли эта переменная (START) считаться глобальной?

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Если вы определите:

const static int START = 0;

в области видимости файла, тогда START будет иметь внутреннюю связь и статическую длительность из-за static.

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

0 голосов
/ 12 октября 2019

Да и нет.

Допустим, вы добавили это определение в «myvar.h», а затем включили этот заголовочный файл в «main.c» и «other.c»

Все функции в main.c и other.c будут знать об определенной переменной - так что она в некотором роде глобальная.

Но на самом деле будут две разные переменные с одинаковым именем,Изменения, сделанные функциями в «main.c», не будут видны функциями в «other.c» и наоборот.

Это потому, что статические переменные, определенные вне функций, считаются «локальными для модуля компиляции». .

С другой стороны, если вы просто удалите ключевое слово «static», переменная будет определена дважды (один раз для каждой единицы компиляции, в которую включен файл заголовка), и компоновщик выдаст «дубликат». ошибка символа.

...