ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
22 июля
1002516 Топик полностью
il-2 (08.05.2020 08:09, просмотров: 339) ответил fk0 на В отдельном модуле (.c) определить переменную как, например, int x. В хидерах определить как extern const int x. Переменная будет читаема, но не записываема. Для изменения переменной в том же отдельном модуле, где определена переменная, сделать специальную функцию и разместить её декларацию в хидерах. Преимущество перед твоим методом: доступ на чтение более легковесный (чтение ячейки памяти, вместо вызова функции). Работает только в C, или нужно добавлять extern "C"
Меня терзают смутные сомнения... 

Обычно .h-файлы с интерфейсом модуля (в котором будет наш extern const int x;) включают и в сам модуль (в котором будет наш int x;). Проверять лень, а сообразить не могу, будет ли в этом случае ошибка как при несовпадении между объявлением и определением функции? Или с переменными по другому - та, которая extern считается как другая переменная, а в области видимости модуля будет своя (int x;) ???


И еще есть неясный момент - при линковке. Глобальные переменные, объявленные через const могут размещаться в другой области памяти (например во Flash), а в гарвардовской архитектуре для доступа к ним могут использоваться другие инструкции. В таком случае для гарварда это будут действительно разные переменные. И линкер ругнется, что нет переменной const int x;