[英]What does (int (*)()) mean in a function call
就像標題所說,我想知道C-define-function-call中的“ (int(*)()) ”是什么意思?
例如,它看起來類似於:
#define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x)
或這個
#define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx)
先感謝您!
解密復雜C表達式的最簡單方法是從最內層表達式開始,然后以逆時針方向圖案移動到下一個表達式。 (int(*)())
返回int的函數的指針,因為它包含在outer()中是因為宏。
希望這會有所幫助,最好的問候,湯姆
(int (*)())
是一個類型轉換運算符,也就是說你要求編譯器的行為就像它右邊的表達式是int (*)()
。 正如其他人所指出的那樣,所討論的類型意味着“指向接受任何參數的函數的指針,並返回一個int
”。
要理解類型本身,首先需要理解在C中聲明變量的奇怪方式:在大多數語言中,變量聲明的語法是從類型規范的語法構造的,但在C中,在某種程度上,它是其他方式。
如果你要聲明一個包含指向這樣一個函數的指針的變量,你會寫:
int (*fp)();
意思是類似於(*fp)()
的表達式將是int
類型:“取fp
,取消引用它,用任何參數調用它,你將得到一個int
”。
現在,為了在上面的聲明中獲得fp
類型的類型轉換運算符,丟失標識符並在括號周圍添加括號:get get (int (*)())
。
這意味着名為Blub
的read
的第一個參數是一個指向函數的指針,該函數返回一個char *
並且不接收任何參數。
第一個說,read將“返回char指針的函數指針”作為第一個參數,將“指向char指針的指針”作為第二個參數。 如果你想做Bla,只需寫Bla(x),我就會處理de read部分!
第二個說,PEM_ASN1_write_bio的第一個參數必須是“返回int的函數指針”。 第二個參數是“指向char的指針”。 你可以使用XXX(a,b)代替PEM_ASN1_write_bio(b,a),這就是全部
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.