「匿名結構」是 C 語言的標準嗎?詳細分析
簡介
C 中「匿名結構」的概念引發了對其標準化和精確性的質疑。本文旨在透過檢查相關文件並探討不同類型的匿名結構之間的細微區別來澄清這些問題。
匿名結構是非標準的嗎?
根據微軟的MSDN文件中,匿名結構(沒有名字定義的結構)被認為是C語言中的非標準。然而,ISO C 標準並沒有明確解決這方面的問題。
理解匿名結構
未命名結構:
C 標準允許用於聲明未命名結構(沒有名稱的結構),可以將其實例化並用作常規命名結構結構體。
匿名結構體:
匿名結構體是指某些 C 編譯器(例如 GCC 和 Visual C)中的特定功能,允許直接從包含物件。
區別
主要區別在於會員的可訪問性。對於未命名結構,可以透過標準點運算子存取成員(例如 foo.bar),而匿名結構允許直接存取成員而無需指定結構名稱(例如 foo.hi)。
標準與非標準
標準定義了未命名的功能結構體,但不是直接存取成員的「匿名」行為。因此,後者被認為是某些編譯器支援的非標準功能。
使用範例
標準未命名結構:
struct Foo { struct { int hi; int bye; } bar; };
非標準匿名結構體:
struct Foo { struct { int hi; int bye; }; // <--- no member name! };
第二個例子中,可以直接存取成員:
f.hi = 3; // Non-standard, compiler-dependent feature
結論
匿名結構體,正如它們直接訪問包含對象的成員的能力所定義的,是某些C 編譯器支援的非標準功能。標準 C 提供了未命名結構的功能,但未指定成員的直接可訪問性,並且不保證支援。
以上是C 標準中的匿名結構是否符合標準?的詳細內容。更多資訊請關注PHP中文網其他相關文章!