繁体   English   中英

可以将非空函数指针作为空函数指针传递吗?

[英]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以这样一种方式转换,即它的返回值被抛出。

如果这不可能,为什么不呢?

对不起,如果我错过了这一点,但是即使使用-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);
  }

我可以理解为什么这是一个可疑的转换,但事实上,我怀疑它在大多数现代编译器上对于整数都可以正常工作。 整数几乎总是在寄存器中返回。

但是,正如我所说,也许我错过了一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM