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