2009-11-25 20 views
3

就像標題所說的那樣,我想知道在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) 

預先感謝您!

回答

9

將參數強制轉換爲指向函數的指針,該函數返回char *並採用零個或多個參數。第二個函數返回int

您可以使用一個名爲「cdecl」程序(和網站,現在),以幫助這些,它說:

  • (char *(*)()):投unknown_name爲指針函數返回字符指針
  • (int (*)()):投unknown_name成函數指針返回int
+0

事實上,CDECL無法解析這些 – intgr 2009-11-25 14:51:38

+1

大網站,順便說一句。 – 2009-11-25 14:52:42

+0

@intgr:cdecl在這裏工作得很好.. – 2009-11-25 14:56:27

0

這意味着read的第一個參數,命名爲Blub是一個指針,指向RET A功能甕char *並收到任何參數。

0

第一個表示讀作爲第一個參數需要「返回一個字符指針的函數指針」作爲第一個參數,而「指針指向一個字符指針」作爲第二個參數。如果你想做Bla,只需寫Bla(x),我會處理de閱讀的部分!

第二個說,第一個參數PEM_ASN1_write_bio必須是「返回一個int的函數指針」。第二個參數是「指向char的指針」。你也可以使用XXX(A,B),而不是PEM_ASN1_write_bio(B,A),這就是所有

1

(int (*)())是一個類型轉換操作符,這是說你問的編譯器的行爲 彷彿其右邊的表達水平類型爲int (*)()。正如其他人指出的那樣, 所討論的類型的意思是「指向接受任何參數的函數的指針, 並返回int」。爲了理解類型本身,首先需要了解變量在C中聲明的奇怪方式:在大多數語言中,變量聲明 的語法是從類型規範的語法構造的,但是在C語言中,在某種程度上, 這是相反的方式。

如果要聲明包含一個指向這樣的功能的變量,可編寫:

int (*fp)(); 

這意味着類似(*fp)()的表達將是int類型的:「取fp, 解除引用它,用任何參數調用它,你將得到一個int「。

現在,爲了在上面的聲明中獲得類型爲fp的類型轉換運算符,丟失了標識符並在其周圍添加括號:得到(int (*)())

3

解密複雜C表達式的最簡單方法是從最裏面的表達式開始,然後以逆時針方式移動到下一個表達式。 (INT(*)())

  1. (*)的指針,逆時針運動擊中(,然後再移動到打)
  2. (*)()的指針運行,移動到(然後再移動到)
  3. int(*)()指向返回int的函數的指針,移動到int,然後繼續點擊)
  4. (int(*)() )最後繼續前進(並且你有它,

一個指向返回int的函數的指針,因爲它是裹在外面()是因爲宏。

希望這有助於 最好的問候, 湯姆

相關問題