在C11標準有下列通過嵌套在單個聯合內的結構共同的初始序列的定義:普通的初始序列 - 在C標準定義
6.5.2.3/6
一個特殊的保障是爲了簡化使用工會提出: 如果工會包含共用一個初始 序列幾種結構(見下文),而如果聯合對象當前包含一個 這些結構,它是每個以檢查其中任何一個的共同初始部分 任何地方都可以看到該工會的完成類型 的聲明。兩個結構共享一個通用初始值 序列如果相應成員對於一個或多個初始成員的序列具有兼容類型(並且對於 位字段,寬度相同)。
例3下面是一個有效的片段:
union { struct { int alltypes; } n; struct { int type; int intnode; } ni; struct { int type; double doublenode; } nf; } u; u.nf.type = 1; u.nf.doublenode = 3.14; /* ... */ if (u.n.alltypes == 1) if (sin(u.nf.doublenode) == 0.0) /* ... */
根據我這篇文章的理解上面的代碼,但是,是無效的。
在外部if
陳述我們表明n::alltypes
數據成員處於活動狀態(同時與ni::type
和nf::type
爲標準狀態),但在內部if
我們使用nf::doublenode
這是不常見的初始序列的一部分。
有人可以澄清這個問題嗎?
'nf.doublenode'分配在'3.14'的註釋上方。這種行爲與「同時活躍」無關,只是工會工作的基礎。 – oldrinb
上面的代碼是創建類似於Pascal變體記錄的東西,根據選擇器字段(本例中爲'alltypes' /'type'),您可以擁有不同類型的記錄/結構。 – ninjalj