繁体   English   中英

如何从函数数组中调用特定的 function?

[英]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....

但这似乎效率低下。 因此,我尝试在不实际调用它们的情况下创建一个函数数组,然后稍后调用索引的 function。 代码段如下(抱歉混乱,这是一个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]();
}

但是,当我尝试编译它时,出现错误:

错误:表达式不能用作 function。

该逻辑在 Python 中有效,所以我假设有一个我不知道的概念在高级语言中被抽象掉了。 我很愿意学习它,我只需要知道是什么。

类型错误 - 而不是int你需要void (*)()作为类型(因为你有一个void someFunction() function 指针数组,而不是整数数组 - 而前者可以转换为后者方式,作为 memory 地址,不能调用整数)。

void (*Modes[3])() = {showTime, flashlight, antiAnxiety};

通过类型定义,这段代码变得更容易理解:

typedef void (*func_type)();
func_type Modes[3] = {showTime, flashlight, antiAnxiety};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM