可以将非空函数指针作为空函数指针传递吗?
Possible to pass a non-void function pointer as a void function pointer?
假设我有一个函数 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
的 return 值抛出。
如果这不可能,为什么不呢?
抱歉,如果我没有抓住要点,但即使使用 -Wall
:
,此编译也不会出现警告 gcc
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);
}
我明白为什么这是一个可疑的强制转换,但事实上,我怀疑它在大多数现代编译器上对整数都能正常工作。整数几乎总是在寄存器中返回。
但是,正如我所说,也许我遗漏了什么。
假设我有一个函数 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
的 return 值抛出。
如果这不可能,为什么不呢?
抱歉,如果我没有抓住要点,但即使使用 -Wall
:
gcc
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);
}
我明白为什么这是一个可疑的强制转换,但事实上,我怀疑它在大多数现代编译器上对整数都能正常工作。整数几乎总是在寄存器中返回。
但是,正如我所说,也许我遗漏了什么。