[英]C function declaration in a parameter list
我在C代碼中發現有點令人困惑的事情
struct SomeStruct {
// ...
void (*f)(const void *x);
};
void do_some( void f(const void *x) ) { // what?
struct SomeStruct* v;
// ...
v->f = f;
}
我可以理解do_some
取代函數而不是函數指針。 但是在實踐中,與void do_some( void (*f)(const void *x) )
區別是什么? 什么時候應該用這個? 在C ++中允許這樣做嗎?
沒有區別。 這只是語法糖。 它在C和C ++中都是允許的。
函數參數簡單地由編譯器重寫為函數指針參數,就像編譯器將數組參數重寫為指針參數一樣。
作為參考,這里是C標准第3.7.1節的摘錄:
g(int (*funcp)(void))
// ...
or, equivalently,
g(int func(void))
我可以理解
do_some
取代函數而不是函數指針。
不,作為函數參數,函數類型被調整為相應的函數指針類型。 參數f
與成員f
具有相同的函數指針類型。
但是在實踐中,與void
do_some( void (*f)(const void *x) )
區別是什么?
沒有任何。
什么時候應該用這個?
如果你喜歡額外的冗長。 或者在其他上下文中,例如聲明,您需要區分函數和指針類型。
在C ++中允許這樣做嗎?
對於函數參數(以及非類型模板參數),在C ++中應用相同的調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.