我想在GCC(基本上是AVR-GCC)中创建一个静态库。但我想要的某些参数允许用户更改。例如,我将为键盘界面创建一个库。在此库中,超时值和输入键可以根据用户的需要而不同。目前我在keyboard.h文件中输入#define值为enter键和超时。但是当我去静态库时,如果我没有弄错的话,在libary的编译期间决定输入键的值。因此,即使用户在keypad.h中更改了enter键的值,库也不会考虑它。所以我想到了initializeKeypad()函数,其中这个函数将设置enter键的值和全局定义的超时。但是当我这样做时,重新进入就会失去。所以唯一的选择是将所有用户可配置参数传递给initializeKeypad()函数吗?还有其他更好的办法吗?
答案 0 :(得分:3)
您无需在图书馆中保持全局设置:另一个选项是为图书馆设置分配struct
,并为用户提供opaque handle:
KeypadHandle khdl = initializeKeypad();
...
char c = keypadRead(khdl);
...
keypadRelease(khdl);
这种方法的一个缺点是,用户现在只要使用你的库就被迫保持手柄,例如,将它放在他们自己的静态变量中。