我有一个8位字节,表示8个物理开关的状态。我需要为开关的每个排列打开和关闭做一些不同的事情。我的第一个想法是写一个256 case switch语句,但输入很快就变得乏味了。
有更好的方法吗?
编辑:我应该对这些功能更清楚一点。我有8个按钮,每个按钮都做一件事。我需要能够检测是否同时按下多个开关,这样我就可以同时运行这两个功能。
答案 0 :(得分:3)
您可以使用函数指针数组。小心将其索引为正值 - 可能会签署char
。这是否比使用switch
语句更乏味是有争议的 - 但执行肯定会更快。
#include <stdio.h>
// prototypes
int func00(void);
int func01(void);
...
int funcFF(void);
// array of function pointers
int (*funcarry[256])(void) = {
func00, func01, ..., funcFF
};
// call one function
int main(void){
unsigned char switchstate = 0x01;
int res = (*funcarry[switchstate])();
printf ("Function returned %02X\n", res);
return 0;
}
// the functions
int func00(void) {
return 0x00;
}
int func01(void) {
return 0x01;
}
...
int funcFF(void) {
return 0xFF;
}
答案 1 :(得分:2)
您可以定义一个函数数组,并将该字节用作数组中的索引,并相应地在数组中的给定位置调用该函数。