「匿名結構」是 C 的標準嗎?
MSDN 聲稱匿名結構在 C 中是非標準的,但仔細檢查會發現不同的場景。雖然 C 標準定義了“未命名結構”,但它並沒有專門解決“匿名結構”的概念。
定義未命名結構
C 標準允許未命名結構的聲明,也稱為匿名結構。這些結構沒有名稱,通常用作其他結構中的嵌套類型。以下程式碼片段示範了一個未命名的結構:
此程式碼在 Foo 結構中定義了一個未命名的結構。未命名結構由兩個成員組成:hi 和 bye。
存取匿名結構的成員
標準 C 允許使用點運算子存取未命名結構的成員。例如,在前面的範例中,可以如下存取hi 成員:
匿名結構與「未命名結構為成員」
While C 03和C 11 沒有明確提及“匿名結構”,即訪問未命名結構成員的現象,就好像它們是父結構的成員,沒有具體提及。這種行為被稱為“匿名結構作為成員”,並未包含在未命名結構的標準中。
MSDN 的混亂
MSDN 似乎錯誤地將未命名結構與匿名結構作為成員。雖然未命名結構是標準的,但作為成員的匿名結構是某些編譯器(例如 GCC 和 Visual C)支援的非標準功能。
結論
總之,雖然匿名結構作為成員在 C 中不是標準的,標準完全支持未命名結構。術語「未命名結構」和「匿名結構」指的是不同的概念,後者指的是訪問未命名結構的成員的非標準行為,就好像它們是父結構的成員一樣。
以上是匿名結構是 C 中的標準嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!