Дано
struct Foo {
uint32_t a;
uint32_t b[];
};
Что такое sizeof(Foo)
? Это определяемое реализацией или неопределенное поведение? Отличается ли ответ для C против C ++?
Компилятор будет игнорировать член гибкого массива, как если бы его не было.
C11-§6.7.2.1 (стр. 18)
[…] В большинстве случаев член гибкого массива игнорируется. Особенно, размер структуры такой, как если бы гибкий элемент массива был опущен за исключением того, что у него может быть больше завершающего отступа, чем подразумевает […] отсутствие.
AFAIK, гибкий член массива не является частью стандарта C ++ до c ++ 14. Но GNU поддерживает его как расширение. Поведение будет одинаковым как для C, так и для C ++.
Других решений пока нет …