Дано
struct Foo {
uint32_t a;
uint32_t b[];
};
Что такое sizeof(Foo)
? Это поведение, определяемое реализацией или неопределенное? Различается ли ответ для C и C++?
Дано
struct Foo {
uint32_t a;
uint32_t b[];
};
Что такое sizeof(Foo)
? Это поведение, определяемое реализацией или неопределенное? Различается ли ответ для C и C++?
Компилятор проигнорирует гибкий элемент массива, поскольку его там нет.
C11-§6.7.2.1 (p18)
[...] В большинстве ситуаций гибкий элемент массива игнорируется. В частности, размер структуры такой же, как если бы элемент гибкого массива был опущен, за исключением того, что он может иметь большее количество завершающих отступов, чем это подразумевает [...].
AFAIK, гибкий элемент массива не является частью стандарта С++ до С++ 14. Но GNU поддерживает его как расширение. . Поведение будет одинаковым как для C, так и для C++.
struct { char a; double d[]; };
. Если вы проигнорировали d
, размер может быть 1.
- person rici; 19.07.2017
printf
- person Chris Turner   schedule 19.07.2017printf
тебе этого не скажет. - person Timmmm   schedule 19.07.2017