替代 C 中的许多 case switch 语句
Alternative to many case switch statement in C
我有一个 8 位字节代表 8 个物理开关的状态。我需要为打开和关闭的每个开关排列做一些不同的事情。我的第一个想法是写一个 256 case switch 语句,但很快就变得乏味了。
有更好的方法吗?
编辑:我应该对函数更清楚一些。我有 8 个按钮,每个按钮做一件事。我需要能够检测是否同时按下了多个开关,这样我就可以 运行 同时使用这两个功能。
你可以定义一个函数数组,将字节作为数组中的索引,对应调用数组中给定位置的函数。
您可以使用函数指针数组。小心通过正值对其进行索引 - 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;
}
我有一个 8 位字节代表 8 个物理开关的状态。我需要为打开和关闭的每个开关排列做一些不同的事情。我的第一个想法是写一个 256 case switch 语句,但很快就变得乏味了。
有更好的方法吗?
编辑:我应该对函数更清楚一些。我有 8 个按钮,每个按钮做一件事。我需要能够检测是否同时按下了多个开关,这样我就可以 运行 同时使用这两个功能。
你可以定义一个函数数组,将字节作为数组中的索引,对应调用数组中给定位置的函数。
您可以使用函数指针数组。小心通过正值对其进行索引 - 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;
}