[英]Is it safe to pass a void pointer to function that accepts a non-void pointer?
[英]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.