首頁 > 後端開發 > C++ > 什麼是 C 的「最令人煩惱的解析」以及它如何誤導函數宣告?

什麼是 C 的「最令人煩惱的解析」以及它如何誤導函數宣告?

Barbara Streisand
發布: 2024-11-24 13:22:12
原創
543 人瀏覽過

What's C  's

C 最令人煩惱的解析

在 C 中,解析程式碼片段的方式可能會導致意外的行為。一個臭名昭著的例子被稱為「最令人煩惱的解析」。

函數宣告之謎

考慮以下程式碼:

widget w(gadget(), doodad());
登入後複製

乍一看,它似乎宣告了一個名為w 的widget 類型的變數。然而,這段程式碼實際上定義了一個名為 w 的函數,它接受兩個參數。

參數衰減和指標轉換

在函數宣告中,陣列類型的參數衰減為指標到第一個元素,函數型別的參數衰減為函數指標。因此,w 的等效聲明是:

widget w(gadget(*)(), doodad(*)());
登入後複製

這表示函數 w 將一個指向不帶參數並傳回小工具的函數的指標作為其第一個參數。它還需要第二個參數,一個指向不帶參數並傳回小玩意的函數的指標。函數本身傳回一個小部件。

額外的複雜性

「最令人煩惱的解析」在以下情況下變得更加混亂:

widget w(gadget(x));
登入後複製

如果x已經是一個變量,如何將其解釋為函數聲明?答案在於,在 C 中,宣告變數時可以使用額外的括號。因此,小工具 x;和小工具(x);兩者都聲明了名為 x 的相同變數。因此,上面的程式碼是一個函數的聲明,該函數採用名為 x 的 gadget 類型的第一個參數,並傳回一個小部件。

以上是什麼是 C 的「最令人煩惱的解析」以及它如何誤導函數宣告?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板