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中文網其他相關文章!