在類似下面的代碼,我們通常有2個字節的結構的末尾隱式墊:聚合初始值與隱結構填充
struct foo {
int32_t x ;
int16_t y ;
// <<< 2 bytes for total sizeof(foo) == 8
} ;
有人問我今天的聚合初始值不與額外的兩個字節:
foo o = { 0, 0 } ;
即:這是怎麼回事等同於
foo o ;
memset(&o, 0, sizeof(foo)) ;
我沒有線索,所以我建議不要依賴那個(總之,問題總是很麻煩,所以這是很好的一般建議IMO)。
有沒有人知道C語言規範是否說明了當平臺ABI需要對特定結構有問題的填充時,隱式填充的集合初始化會做什麼?
奇怪,只是一個思想實驗,或這會影響一個項目?我會假設它沒有填充它,儘管在你的編譯器中可能有一些'#pragma pack'版本去除填充並使其等價於... – eruciform 2010-07-22 18:23:33