私はライブラリを作成しています。このライブラリには、内部変数を初期化する関数init()
があります。これらの変数は外部からアクセス可能でなければなりませんが、読み取り専用です。C言語での読み込み専用変数の取得
私は組み込みデバイスで作業しているため、実際にゲッター機能を持つのは広すぎます。
何が良い解決策は、私は(彼らは両方とも悪いソリューションと仮定)これら二つのもの以外に使用することができます: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
ヘッダファイルを読む人は 'libc'に限定された静的変数ではないので、' _internal_parameter'をアクセスして変更することができます。 – nowox
この状況では実用性が最も重要だと思います。 '_interal_parameter'への書き込みに関する適切な文書化警告とともにインラインで使用してください。とにかくユーザーがそれに書き込むと、それは自分の責任です。単一の関数呼び出しで問題が適切に機能しなくなる場合、ライブラリユーザーから少なくともあるレベルの能力を期待できます。 – user694733