就像標題所說的那樣,我想知道在C-define-function-call方法中「(int(*)())」 ?函數調用中的(int(*)())是什麼意思
作爲例子,它看起來與此類似:
#define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x)
或本
#define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx)
預先感謝您!
就像標題所說的那樣,我想知道在C-define-function-call方法中「(int(*)())」 ?函數調用中的(int(*)())是什麼意思
作爲例子,它看起來與此類似:
#define Bla(x) (Char *) read((char *(*)()) Blub, (char **) x)
或本
#define XXX(nx, id) PEM_ASN1_write_bio((int (*)()) id, (char *) nx)
預先感謝您!
將參數強制轉換爲指向函數的指針,該函數返回char *
並採用零個或多個參數。第二個函數返回int
。
您可以使用一個名爲「cdecl」程序(和網站,現在),以幫助這些,它說:
(char *(*)())
:投unknown_name爲指針函數返回字符指針(int (*)())
:投unknown_name成函數指針返回int這意味着read
的第一個參數,命名爲Blub
是一個指針,指向RET A功能甕char *
並收到任何參數。
第一個表示讀作爲第一個參數需要「返回一個字符指針的函數指針」作爲第一個參數,而「指針指向一個字符指針」作爲第二個參數。如果你想做Bla,只需寫Bla(x),我會處理de閱讀的部分!
第二個說,第一個參數PEM_ASN1_write_bio必須是「返回一個int的函數指針」。第二個參數是「指向char的指針」。你也可以使用XXX(A,B),而不是PEM_ASN1_write_bio(B,A),這就是所有
(int (*)())
是一個類型轉換操作符,這是說你問的編譯器的行爲 彷彿其右邊的表達水平類型爲int (*)()
。正如其他人指出的那樣, 所討論的類型的意思是「指向接受任何參數的函數的指針, 並返回int
」。爲了理解類型本身,首先需要了解變量在C中聲明的奇怪方式:在大多數語言中,變量聲明 的語法是從類型規範的語法構造的,但是在C語言中,在某種程度上, 這是相反的方式。
如果要聲明包含一個指向這樣的功能的變量,可編寫:
int (*fp)();
這意味着類似(*fp)()
的表達將是int
類型的:「取fp
, 解除引用它,用任何參數調用它,你將得到一個int
「。
現在,爲了在上面的聲明中獲得類型爲fp
的類型轉換運算符,丟失了標識符並在其周圍添加括號:得到(int (*)())
。
解密複雜C表達式的最簡單方法是從最裏面的表達式開始,然後以逆時針方式移動到下一個表達式。 (INT(*)())
一個指向返回int的函數的指針,因爲它是裹在外面()是因爲宏。
希望這有助於 最好的問候, 湯姆
事實上,CDECL無法解析這些 – intgr 2009-11-25 14:51:38
大網站,順便說一句。 – 2009-11-25 14:52:42
@intgr:cdecl在這裏工作得很好.. – 2009-11-25 14:56:27