用户自定义静态库vs re-entrancy

问题描述:

我想在GCC(基本AVR-GCC)中创建一个静态库。但是我想要的某些参数允许用户更改。例如,我将为键盘界面创建一个库。在这个库中,超时值和回车键可以根据用户的需要而不同。目前我已经为keypad.h文件中的#define值输入了密钥和超时值。但是当我去静态库时,如果我没有弄错,那么在编译期间确定enter键的值。因此,即使用户在keypad.h中更改了输入键的值,库也不会考虑它。所以我想到了initializeKeypad()函数,其中此函数将为全局定义的输入键和超时值设置值。但是当我这样做时,重新进入会失去。所以唯一的选择是将所有用户可配置参数传递给initializeKeypad()函数吗?任何其他更好的方法?用户自定义静态库vs re-entrancy

你不必在你的库全局设置:另一种选择是分配与库设置一个struct,并给它提供一个opaque handle用户:

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

这种方法的缺点是:例如,用户现在*在他们使用库的时候保持这个句柄,例如把它放在他们自己的静态变量中。

+1

不过,这是最好的方法,尤其是,对于一个库;) –

+0

因此,在库内部,我们将声明一个指向结构的指针,并以毫无意义的方式分配内存并返回由malloc返回的指针。相反,调用部分本身可以定义一个结构并传递指向结构体的指针,我也猜测。这可以避免malloc的使用和可能的内存泄漏吗?不透明手柄的优点是什么? – Rajesh

+0

我用不透明句柄看到的一个优点是,如果有的话,初始值可以在库本身内以更好的方式处理。 – Rajesh