【发布时间】:2020-04-30 08:55:49
【问题描述】:
在下面的示例中,我在指向应该接收参数的函数的指针中对不带参数的函数进行了 CAST。假设它给出了预期的结果,这个过程是否可能导致一些故障? 在线测试:https://onlinegdb.com/SJ6QzzOKI
typedef void (*Callback)(const char*);
Callback cb;
void inserisce_cb(void* c) {
cb=c;
}
void esegue_cb(){
cb("pippo");
}
void scriveTitolo(const char* titolo) {
Uart_Println(titolo);
}
void scriveTitolo2() {
Uart_Println("pluto");
}
void main(){
inserisce_cb(scriveTitolo);
esegue_cb();
inserisce_cb(scriveTitolo2);
esegue_cb();
}
【问题讨论】:
-
一般来说,对于 c++ 中的函数指针,你应该使用 std::function,它基本上是相同的,但是有类型检查等等。
-
您的示例无法编译,因为不允许从 void 隐式转换为函数指针。
-
在 C 中,
void*pointer 与任何指向数据对象的指针兼容。这并不一定意味着它可以用来存储函数指针。 -
Oleg Andriyanov:为 c++ 兼容性添加了演员表
-
Oleg Andriyanov 和 camp0 :编辑问题:限制为 C 语言
标签: c function pointers casting c99