В коде, подобном следующему, у нас обычно есть неявное заполнение 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 требуется такое заполнение для конкретной структуры?