【问题标题】:Why is it possible to pass a void(*)(int x, int y) to attachInterrupt that expects void(*)()?为什么可以将 void(*)(int x, int y) 传递给期望 void(*)() 的 attachInterrupt?
【发布时间】:2021-12-28 18:29:52
【问题描述】:

我一直不专心,并且由于某种原因创建了一个接受两个参数的函数,然后我将它传递给attachInterrupt,如下所示:

int state = 42;
void simplified_state_handler(){
    state++;
}

void interrupt_func(int x, int y) {
    simplified_state_handler();
}

attachInterrupt(digitalPinToInterrupt(10), interrupt_func, CHANGE);

代码编译后没有任何抱怨,甚至可以正常工作。现在,过了一会儿,我真的不明白为什么。阅读和挖掘attachInterrupt 代码并没有帮助。请解释为什么我可以通过这样的功能。我在示例中保留(现在)无用的simplified_state_handler,也许它很重要。

【问题讨论】:

    标签: c++ arduino arduino-c++


    【解决方案1】:

    AVR 板的编译器设置允许。

    这只是一个warning: invalid conversion from 'void (*)(int, int)' to 'void (*)()' [-fpermissive]

    在其他 Arduino 平台(SAMD、STM32、esp8266)上,这是一个错误。

    AVR 平台的编译器设置从一开始就很好,不能突然改变。许多现有的代码将无法编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-17
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-04-12
      相关资源
      最近更新 更多