簡體   English   中英

(函數指示符)和{函數指針}之間的區別?

[英]Difference between (function designator) and {function pointer}?

在 clang 中,指向 function 的指針和指示符/指示符具有不同的結果分組符號,括號花括號相比,如在更下方的代碼片段中所見。

什么是:

type * type(*)(type)

用於和對比/什么是:

type *(type)

用於? 大括號用於列表、復合語句和聚合,而圓括號主要用於排序、分組、轉換和 arguments。

看起來第一個是對接受特定類型參數的 function 指針的類型引用,如果包含在括號中,則命令單獨評估組(如果是較大表達式的一部分)或創建一個強制轉換,在 function 的解析后將轉換它以指定大小和 alignment 要求的返回類型的特定值代替包含該值的二進制序列。

第二個是在一個帶有花括號的塊中,因此是一個復合 object 或語句塊,因為我看不到它如何附加到聚合,盡管它可能引用調用的 function 主體結果。

第二個片段看起來像是對定義的類型或 object 組的類型引用,並且由於類型可能不與 object 共享名稱,因此有效地使其成為關鍵字,我認為這會以某種方式創建一個與自身相乘的命名 object,或者是反向轉換或其他東西,因為除了 object 聲明外,帶星號的關鍵字沒有實際用途。

P

為什么第一個符號用圓括號括起來,而第二個符號使用大括號

例如,編譯時的以下代碼片段,

.

(*function)(1);

編譯后注釋中提到的符號記為:

(type *(*)(type))

括號包含控制台編譯日志中的表示。

.

然而:

.

function(1);

編譯后注釋中提到的符號記為:

{type *(type)}

大括號包含控制台編譯日志中的表示。

.

兩者之間的區別是什么,在什么情況下它實際上適用於任何通常/有用的上下文?

我對 C 語言的語法和語義的一般觀察表明,第一個似乎是一個基本的有序組表達式,可以在逗號分隔列表中使用或用作 function 參數,而第二個似乎是一個結構,聯合或塊語句。

我正在探索 function 指針,所以我嘗試了兩個,這兩個注釋是 clang 對編譯的評論。 我閱讀的其他 5 篇文章似乎都沒有闡明任何上下文中分組符號的性質,但確實提供了對 function 指針及其應用的額外見解。

謝謝!

function 指示符是一個類型為 function 的表達式。

例如在

a = foo(x);

foo 是一個 function 指示符。

Function pointer是對 function 的引用。Function 指示符在用作值時衰減為 function 指針。

int (*fptr)(int) = foo;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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