问题描述
我正在基于Arduino / ATMega构建手表。现在的主要目标是通过按下侧面的按钮在“模式”(不同功能)之间切换。最初,我有一个很长的if语句,如下所示:
ModelAndView mav = new ModelAndView();
mav.setViewName("exception");
//expected:web_file2
//actual:exception
return mav;
但这似乎效率很低。因此,我尝试不实际调用函数就对它们进行数组处理,然后再调用索引函数。代码段如下(很抱歉,这是一个WIP)
if (counter == 0)
mode1();
enter code
else if (counter == 1)
mode2();
.... Repeat....
但是,当我尝试编译它时,出现错误:
错误:表达式不能用作函数。
该逻辑在Python中有效,因此我假设有一个我不知道的概念可以在高级语言中抽象出来。我很愿意学习它,我只需要知道它是什么。
解决方法
类型是错误的-您需要使用int
作为类型,而不是void (*)()
(因为您有一个void someFunction()
函数指针数组,而不是整数数组-而前者可以可以以某种方式转换为后者,例如作为内存地址,您不能调用整数)。
void (*Modes[3])() = {showTime,flashlight,antiAnxiety};
使用类型定义,此代码变得更容易理解:
typedef void (*func_type)();
func_type Modes[3] = {showTime,antiAnxiety};