替代 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;
}