簡體   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