Размер структуры с гибким членом массива

Дано

struct Foo {
uint32_t a;
uint32_t b[];
};

Что такое sizeof(Foo)? Это определяемое реализацией или неопределенное поведение? Отличается ли ответ для C против C ++?

5

Решение

Компилятор будет игнорировать член гибкого массива, как если бы его не было.

C11-§6.7.2.1 (стр. 18)

[…] В большинстве случаев член гибкого массива игнорируется. Особенно, размер структуры такой, как если бы гибкий элемент массива был опущен за исключением того, что у него может быть больше завершающего отступа, чем подразумевает […] отсутствие.

AFAIK, гибкий член массива не является частью стандарта C ++ до c ++ 14. Но GNU поддерживает его как расширение. Поведение будет одинаковым как для C, так и для C ++.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]