如何解决可以将非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);
}
我可以理解为什么这是一个可疑的强制转换,但是实际上,我怀疑它对于大多数现代编译器上的整数都可以正常工作。整数几乎总是在寄存器中返回。
但是,正如我所说,也许我缺少了一些东西。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。