В коде, как в дальнейшем мы, как правило, имеют неявный подушечка 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)) ;
У меня не было ни малейшего понятия, поэтому я рекомендовал не зависеть от этого (совокупные исходники все равно неприятны, так что это хорошая рекомендация для ИМО).
Кто-нибудь знает, говорит ли спецификация языка C что-либо о том, что делает агрегатная инициализация с неявным заполнением, когда платформа ABI требует такого дополнения для конкретной структуры?
странный, просто мысленный эксперимент, или это влияет на проект? я бы предположил, что он не загружается, хотя на вашем компиляторе есть, вероятно, какая-то версия '#pragma pack', чтобы удалить дополнение и сделать его эквивалентным ... – eruciform