Страницы

Поиск по вопросам

вторник, 9 апреля 2019 г.

Глобальная константная переменная

Нужно объявить глобальную переменную:
extern int SIZE_A=10;
Почему-то выводит предупреждение:
warning: 'SIZE_A' initialized and declared 'extern'


Ответ

Эта переменная у вас вовсе не константная :), но проблема не в этом.
Просто нормальная практика такова: в одном файле глобальная переменная объявлена и определена, типа
int SIZE_A = 10;
а в других (например, с помощью механизма включаемых заголовочных файлов) - только объявлено, что где-то в другом файле (т.е. extern) есть такая переменная
extern int SIZE_A;
Просто иначе вы рискуете указать разные значения этой переменной в разных файлах - о чем вас и предупреждают. При этом возможны варианты, в зависимости от компилятора, когда extern со значением приведет к созданию переменной в объектном файле - тогда при линковке будет коллизия - две переменные с одинаковыми именами; какую из них считать верной? или когда extern приведет все же только к ссылке на переменную в другом файле - но тогда будет полностью проигнорировано значение в объявлении extern - его просто некуда будет записать :)

Комментариев нет:

Отправить комментарий