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

时间:2020-09-17 18:34:04

标签: c pointers 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的返回值。

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

1 个答案:

答案 0 :(得分:0)

很抱歉,如果我错过了要点,那么即使使用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);
  }

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

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