Pointers c-指向函数的指针数组,具有不同数量的参数
我正在制作一个简单的调度器,它执行FIFO队列中包含的函数 这些函数具有相同的返回类型Pointers c-指向函数的指针数组,具有不同数量的参数,pointers,function-pointers,arduino-ide,Pointers,Function Pointers,Arduino Ide,我正在制作一个简单的调度器,它执行FIFO队列中包含的函数 这些函数具有相同的返回类型int,但具有不同数量的int参数 我试图实现它,但它似乎不起作用。编译器禁止在int(*)()、int(*)(int)、int(*)(int,int)之间进行转换,或将其转换为任何此类类型。(Arduino草图编译器) 有没有办法解决这个问题,或者你能推荐一个更好的方法?谢谢 我的代码: typedef int (*fnptr)(); // Tried this! int foo(int var) {
int
,但具有不同数量的int
参数
我试图实现它,但它似乎不起作用。编译器禁止在int(*)(
)、int(*)(int)
、int(*)(int,int)
之间进行转换,或将其转换为任何此类类型。(Arduino草图编译器)
有没有办法解决这个问题,或者你能推荐一个更好的方法?谢谢
我的代码:
typedef int (*fnptr)(); // Tried this!
int foo(int var) {
return 0;
}
int main() {
fnptr fp = &foo; // error: invalid conversion from
// 'int (*)(int)' to 'int (*)()'
// [-fpermissive]
return 0;
}
你可以投:
fnptr fp = reinterpret_cast<fnptr>(foo);
fnptr fp=reinterpret_cast(foo);
()
s是“函数调用操作符”,在这种情况下添加它们毫无意义,它将表达式从“获取此函数的地址”更改为“获取此函数返回值的地址”
请注意,我甚至没有包括&
,这是因为函数名的作用非常类似于函数指针,因此它已经是地址了。您可以强制转换:
fnptr fp = reinterpret_cast<fnptr>(foo);
fnptr fp=reinterpret_cast(foo);
()
s是“函数调用操作符”,在这种情况下添加它们毫无意义,它将表达式从“获取此函数的地址”更改为“获取此函数返回值的地址”
请注意,我甚至没有包括
&
,这是因为函数名的作用非常类似于函数指针,因此它已经是地址了。您尝试过fnptr fp=foo代码>?另外,请注意,使用不匹配的函数指针调用函数可能会调用UB。@SouravGhosh-Yup,它会抛出相同的错误fnptr fp=&foo()'也会犯同样的错误。我相信。C99引入了的“限制”。@upoque我没有添加()
您是否尝试了fnptr fp=foo代码>?另外,请注意,使用不匹配的函数指针调用函数可能会调用UB。@SouravGhosh-Yup,它会抛出相同的错误fnptr fp=&foo()'也会犯同样的错误。我相信。C99引入了的“限制”。@upoque i没有添加()