首頁 >後端開發 >C++ >`widget w(gadget(), doodad());` 是 C 語言中的變數宣告還是函數宣告?

`widget w(gadget(), doodad());` 是 C 語言中的變數宣告還是函數宣告?

Barbara Streisand
Barbara Streisand原創
2024-11-19 08:43:03740瀏覽

Is `widget w(gadget(), doodad());` a Variable Declaration or a Function Declaration in C  ?

C 最令人煩惱的解析:揭開函數宣告的神秘面紗

同時理解 widget w()的語法;很簡單,許多程式設計師都很難理解以下程式碼片段如何表示函數宣告:

widget w( gadget(), doodad() ); // pitfall: not a variable declaration

要解開這個謎團,深入研究 C 的衰減規則至關重要。在函數宣告中,陣列類型的參數退化為指向第一個元素的指針,而函數類型的參數則轉換為函數指針。

應用這個原理,上述程式碼轉換為以下簽名:

widget w( gadget(*)(), doodad(*)() );

這表示一個接受兩個參數的函數:一個指向不帶參數並返回gadget 類型的函數的指針,以及一個指向也帶零個參數並傳回doodad 類型的函數的指標。函數本身傳回一個小部件。

複雜性還不止於此。考慮這個令人困惑的例子:

widget w(gadget(x));

鑑於 x 是一個變量,這怎麼可能是一個函數聲明?

在 C 中,宣告變數時允許包含額外的括號,例如小工具x;和小工具(x);。這也適用於函數參數,允許將上述程式碼解釋為函數聲明,該函數聲明採用一個名為 x 的 gadget 類型參數並傳回一個小部件。

以上是`widget w(gadget(), doodad());` 是 C 語言中的變數宣告還是函數宣告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn