传递typedef函数指针作为参数并不适用于Arduino 1.6.5

时间:2015-12-14 13:22:17

标签: arduino function-pointers typedef

我一直试图将这个问题包围起来。有没有我做错了,或者传递typedef函数指针作为参数在Arduino 1.6.5中不起作用?

我有这个:

typedef int (*arithmeticOperation)(int a, int b);

和此:

int multiply(int a, int b){
  return a*b;
}

这有效:

arithmeticOperation result; 
result = multiply; 
Serial.println(result(5, 2));

如果我有这样的功能:

void printResult(int x, int y, int (*arithmeticOperation)(int, int)){
  Serial.println(arithmeticOperation(x, y));
}

这也适用

printResult(5, 3, multiply);
printResult(5, 4, result);

但是有这样的功能:

void test(int x, int y, arithmeticOperation result){
  Serial.println(result(x, y));
}

这样称呼:

test(5, 4, multiply);
test(5, 4, result);

不适用于Arduino 1.6.5。为什么呢?

编辑:

它在2014年中期的MacBook Pro OSX 10.10.5上不适用于Arduino IDE 1.6.5它使用的编译器版本是avr-g ++(GCC)4.8.1

Here are some codes in gist

此处' s File3.ino在Arduino IDE 1.6.5中产生此错误:

File3.ino:4:25: error: 'arithmeticOperation' has not been declared 'arithmeticOperation' has not been declared

答:它不适用于Arduino IDE 1.6.5,但适用于OSX 10.10.5上的Arduino IDE 1.6.6

1 个答案:

答案 0 :(得分:1)

它不适用于Arduino IDE 1.6.5,但适用于OSX 10.10.5上的Arduino IDE 1.6.6,均使用avr-g ++(GCC)4.8.1