c - 可以将非 void 函数指针作为 void 函数指针传递吗?
问题描述
假设我有一个函数foo()
,它接受指向void
函数的指针作为参数。
void foo(void (*bar)(int)) {
bar(5);
}
如果我有一个非void
函数f(int)
bool f(int i) {
// ...
return true;
}
有没有一种方法可以在没有警告的情况下f
传递给它?foo()
我目前的解决方案是定义一个函数void g(int i) {f(i);}
并传递g
给foo
,但这对我来说似乎效率低下。似乎应该有一种方法可以f
抛出它的返回值。
如果这不可能,为什么不呢?
解决方案
对不起,如果我错过了这一点,但这编译时没有警告gcc
,即使是-Wall
:
typedef void (*p_bar) (int);
void foo (p_bar bar)
{
bar(5);
}
int f (int i)
{
printf ("In f(), arg=%d\n", i);
return 1;
}
int main()
{
foo ((p_bar)f);
}
我可以理解为什么这是一个可疑的转换,但事实上,我怀疑它在大多数现代编译器上对整数都可以正常工作。整数几乎总是在寄存器中返回。
但是,正如我所说,也许我错过了一些东西。
推荐阅读
- javascript - 如何使用动态添加的按钮打开模式?
- php - SQL 查询在 PHP 中作为变量返回
- swift - 如何将 UIScrollView 添加到基于 xib 的视图
- python-3.x - 为什么不能从带有 selenium 的网页中提取 p 节点中的所有内容?
- python - python每n秒执行一次函数等待完成
- mysql - 我无法在 laravel 中使用 DB:table() 检索数据
- javascript - 如何有效地将数据存储在数组中?
- r - 在R中将数字转换为特定的日期格式
- php - PHP 文件在 LEMP Docker Compose 设置中不起作用
- java - 如何在 Catalina.out 中禁用休眠日志