Я пишу библиотеку. Эта библиотека имеет функцию init()
, которая инициализирует некоторые внутренние переменные. Эти переменные должны быть доступны снаружи, но только в режиме «только для чтения».Getter для переменной только для чтения в C
Поскольку я работаю над встроенным устройством, он слишком широк, чтобы иметь реальную функцию getter.
Что хорошее решение можно использовать, кроме этих двух из них (при условии, что они оба плохие решения):
Использование в inline
поглотитель (где _internal_parameter
не может быть static
):
inline int get_parameter() { extern int _interal_parameter; return _internal_parameter; }
Использование const
(где переменная const
не очень защищен):
// lib.c
void init() {
*(int*)¶meter = get_value_for_parameter();
}
// lib.h
extern const int parameter //!< initialized by init();
Что именно не так с первым решением? – user4815162342
Любой, кто читает файл заголовка, может осуществлять доступ и изменять '_internal_parameter', поскольку это не статическая переменная, ограниченная' lib.c'. – nowox
Я думаю, что в этой ситуации практичность важна. Используйте inline с соответствующей документацией, предупреждающей о записи в '_interal_parameter'. Если пользователь все равно пишет, это их собственная ошибка. Если вызов одной функции может привести к неправильной работе, вы можете ожидать, по крайней мере, некоторого уровня компетентности от пользователей библиотеки. – user694733