У меня есть такие, как-структуруC структура обивка инициализации
typedef struct
{
int a; // Let's say this ends up being 4 bytes
int b; // 4 bytes
char text[10]; // 10 bytes
} blah_t;
static blah_t myvar;
- Предположим, сумма размеров полей составляет 18 байт
blah_t
, ноsizeof(blah_t)
20 из-за заполнения. myvar
статический, поэтому он будет инициализирован нолем.
Вопрос:
- ли набивка байтов 19 и 20 гарантированно 0 для статической переменной? Если нет, мне нужно будет сделать
memset(&myvar, 0, sizeof(blah_t))
для любогоmemcmp
структуры, которая будет действительной - даже для статической переменной. - Что относительно
calloc(1, sizeof(blah_t))
? Являются ли байты 19 и 20 равными нулю? Я считаю, что это так.
Приятно процитировать стандарт; можете ли вы дать «главу и стих» (какой раздел, какой пункт)? В С2011 (ИСО/МЭК 9899: 2011) в §6.2.6. Представления типов и подраздела §6.2.6.1 Общие положения, пункт 6. –
Хороший момент, я имел в виду и оставил его. 6.2.6.1 Представления типов, пункт 6. –
Я не вижу дублирования с вопросом, который вы упомянули на C++. Классы C++ - это другое животное. Что я надеюсь узнать ... если где-то в спецификации он описывает, как статические переменные инициализируются для этого конкретного случая. –