2017-07-22 3 views
2

静的ライブラリをGCC(基本的にはAVR-GCC)に作成したいと思います。しかし、私はユーザーが変更することを許可する特定のパラメータ。例えば、私はキーパッドインタフェース用のライブラリを作成します。このライブラリでは、ユーザの必要に応じてタイムアウト値と入力キーを異ならせることができます。現在、私は#define値をkeypad.hファイルに入力キーとタイムアウトのために行っています。しかし私が静的ライブラリのために行くとき、入力キーの値は私が間違っていなければ、libaryのコンパイル時に決定されます。したがって、ユーザがkeypad.hのenterキーの値を変更したとしても、それはライブラリによって考慮されません。だから、私はこの関数がグローバルに定義されたエンターキーとタイムアウトの値を設定するinitializeKeypad()関数に行くことを考えました。しかし、私がこれをすると、再入国は失われます。だからオプションは、すべてのユーザーが設定可能なパラメータをinitializeKeypad()関数に渡すことだけです?他のより良い方法?静的ライブラリと再入可能のユーザカスタマイズ

答えて

3

あなたはあなたのライブラリーのグローバル設定を保持する必要はありません。別のオプションは、ライブラリの設定でstructを割り当て、それにopaque handleをユーザーに提供することです:

KeypadHandle khdl = initializeKeypad(); 
... 
char c = keypadRead(khdl); 
... 
keypadRelease(khdl); 

このアプローチの欠点は、ユーザーは、ライブラリを使用している限り、たとえば独自の静的変数に配置するなどして、ハンドルを保持しなければなりません。

+1

しかし、これが最善のアプローチです。 ) –

+0

ライブラリ内では、構造体へのポインタを宣言し、メモリをdunamicallyに割り当て、mallocから返されたポインタを返します。代わりに、部分を呼び出すことで構造体を定義し、構造体へのポインタをライブラリに渡すこともできます。これにより、mallocの使用とメモリリークの可能性が回避されます。これ以上の不透明なハンドルの利点? – Rajesh

+0

私が不透明なハンドルで見る1つの利点は、もしあれば初期値がライブラリ自体の中でより良い方法で処理できることです。 – Rajesh

関連する問題