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

Дано

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++.

Другие вопросы по тегам