2
下面的C代碼:聯盟零初始化鏗鏘VS GCC
union Test {
struct {
int f1;
int f2;
};
struct {
int f3;
int f4;
int f5;
};
};
union Test test = {.f1 = 1, .f2 = 2};
當我編譯這個用gcc 6.1.1 f5
將初始化爲零。當我使用叮噹3.8.0時,它不是。我試着用-O0
和-O2
這兩個編譯器都沒有什麼區別。這是在Linux x64上。
這是正確的行爲,我可以告訴clang在這種情況下行爲像gcc?原因是我嘗試用clang編譯一些代碼,在這種情況下假定爲零初始化。
更新
由於答案爲止舉C11。標準中是否有改變後續版本行爲的變化?
在初始化的情況下,對此也有任何參考? –
我更新了這個問題:這個可能在C11中改變了,gcc默認的是另一個標準而不是clang? –
@SouravGhosh:初始化正在存儲一個值。實際上,在第6.7.9.9節中: >除非另有明確規定,否則就本小節而言,結構體和聯合體類型的未命名成員不參與初始化。即使在初始化之後,結構對象的未命名成員也具有不確定的值。 – Picodev