簡體   English   中英

(int(*)())在函數調用中的含義

[英]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)

先感謝您!

將參數轉換為指向函數的指針,該函數返回char *並接受零個或多個參數。 第二個函數返回int

您可以使用名為“ cdecl ”的程序(現在稱為“ cdecl ”)來幫助解決這些問題,它說:

  • (char *(*)()) :將unknown_name轉換為指向函數的指針,返回指向char的指針
  • (int (*)()) :將unknown_name轉換為函數返回int的指針

解密復雜C表達式的最簡單方法是從最內層表達式開始,然后以逆時針方向圖案移動到下一個表達式。 (int(*)())

  1. (*)指針,逆時針運動點擊(然后再次移動以打開)
  2. (*)()指向函數的指針,繼續執行(然后再次移動到)
  3. int(*)()一個返回int的函數的指針,移到int,然后繼續點擊)
  4. (int(*)())最后轉到(,你有它,

返回int的函數的指針,因為它包含在outer()中是因為宏。

希望這會有所幫助,最好的問候,湯姆

(int (*)())是一個類型轉換運算符,也就是說你要求編譯器的行為就像它右邊的表達式是int (*)() 正如其他人所指出的那樣,所討論的類型意味着“指向接受任何參數的函數的指針,並返回一個int ”。

要理解類型本身,首先需要理解在C中聲明變量的奇怪方式:在大多數語言中,變量聲明的語法是從類型規范的語法構造的,但在C中,在某種程度上,它是其他方式。

如果你要聲明一個包含指向這樣一個函數的指針的變量,你會寫:

int (*fp)();

意思是類似於(*fp)()的表達式將是int類型:“取fp ,取消引用它,用任何參數調用它,你將得到一個int ”。

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

這意味着名為Blubread的第一個參數是一個指向函數的指針,該函數返回一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM