如何从函数数组中调用特定函数?
How to call a specific function from an array of functions?
我正在基于 Arduino/ATMega 构建手表。现在的主要目标是通过按下侧面的按钮在“模式”(不同的功能)之间切换。最初,我有一个像这样的长 if 语句:
if (counter == 0)
mode1();
enter code
else if (counter == 1)
mode2();
.... Repeat....
但这似乎效率不高。因此,我尝试在不实际调用函数的情况下创建一个函数数组,然后稍后调用索引函数。代码段如下(抱歉乱七八糟,是WIP)
int Modes[3] = {showTime,flashlight,antiAnxiety} //these are all void functions that are defined earlier.
int scroller(){
int counter = 0;
int timeLeft = millis()+5000;
while (timer <= millis()){
...more code...
}
Modes[counter]();
}
但是,当我尝试编译它时,出现错误:
Error: expression cannot be used as a function.
该逻辑在 Python 中有效,所以我假设有一个我不知道的概念在高级语言中被抽象掉了。挺愿意学的,只要知道它是什么就可以了
类型错误 - 而不是 int
你需要 void (*)()
作为类型(因为你有一个 void someFunction()
函数指针数组,而不是整数数组 - 而前者可以通过某种方式转换为后者,作为内存地址,不能调用整数)。
void (*Modes[3])() = {showTime, flashlight, antiAnxiety};
此代码通过类型定义变得更容易理解:
typedef void (*func_type)();
func_type Modes[3] = {showTime, flashlight, antiAnxiety};
我正在基于 Arduino/ATMega 构建手表。现在的主要目标是通过按下侧面的按钮在“模式”(不同的功能)之间切换。最初,我有一个像这样的长 if 语句:
if (counter == 0)
mode1();
enter code
else if (counter == 1)
mode2();
.... Repeat....
但这似乎效率不高。因此,我尝试在不实际调用函数的情况下创建一个函数数组,然后稍后调用索引函数。代码段如下(抱歉乱七八糟,是WIP)
int Modes[3] = {showTime,flashlight,antiAnxiety} //these are all void functions that are defined earlier.
int scroller(){
int counter = 0;
int timeLeft = millis()+5000;
while (timer <= millis()){
...more code...
}
Modes[counter]();
}
但是,当我尝试编译它时,出现错误:
Error: expression cannot be used as a function.
该逻辑在 Python 中有效,所以我假设有一个我不知道的概念在高级语言中被抽象掉了。挺愿意学的,只要知道它是什么就可以了
类型错误 - 而不是 int
你需要 void (*)()
作为类型(因为你有一个 void someFunction()
函数指针数组,而不是整数数组 - 而前者可以通过某种方式转换为后者,作为内存地址,不能调用整数)。
void (*Modes[3])() = {showTime, flashlight, antiAnxiety};
此代码通过类型定义变得更容易理解:
typedef void (*func_type)();
func_type Modes[3] = {showTime, flashlight, antiAnxiety};