Pointers c-指向函数的指针数组,具有不同数量的参数

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) {

我正在制作一个简单的调度器,它执行FIFO队列中包含的函数

这些函数具有相同的返回类型
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没有添加
()