我们有一个库,可以访问设备上的按钮.这些按钮被枚举为系统的其余部分,如"电源按钮"等.这样,其余应用程序就不必担心"电源按钮"的实现方式.
我们使用一些看起来像这样(简化)的配置指令来构建这个库:
#define BUTTON_COUNT 2
#define BUTTON_0_NAME "power"
#define BUTTON_1_NAME "reset"
#define BUTTON_2_NAME NULL
Run Code Online (Sandbox Code Playgroud)
问题是,在某些时候我想获取按钮1的名称.理想情况下,我会通过创建一个类似的函数来做到这一点get_button_name(int index).问题是,我找不到一个很好的方法来获得该函数中的编号配置选项.当前的实现如下:
const char* get_button_name(int index) {
switch (index) {
case 0: return BUTTON_0_NAME;
case 1: return BUTTON_1_NAME;
case 2: return BUTTON_2_NAME;
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
问题是,这个代码是为许多设备共享的,因此支持的按钮数量将继续增加.这意味着更改此功能,所有拉入它的设备都必须#define为新按钮添加.
我真的更喜欢(尽管我认为预处理器不可能)是这样的:
const char* get_button_name(int index) {
if (index < BUTTON_COUNT) {
return BUTTON_ ## index ## _NAME;
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
想要更好的解决方案吗?
有阵列怎么样?
const char *buttons[] = {
"power",
"reset"};
const char* get_button_name(int index) {
if (index < sizeof(buttons)/sizeof(buttons[0])) {
return buttons[index];
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)