Инициализировать массив внутри структуры в C - PullRequest
0 голосов
/ 13 января 2019

Я хочу инициализировать массив переменных структуры, а сама структура состоит из массива байтов

struct my_bytes {
    u8 byte[128];
};

struct my_bytes data[] = {
    { 0x12, 0x34, 0x56, 0x78 },
    { 0x13, 0x35, 0x57, 0x79 },
    { 0x14, 0x36, 0x58, 0x7a },
};

Компиляция в родном gcc 4.8.5 - это нормально, но ошибка в другом компиляторе / окружении Есть ли другой способ инициализации данных?

Сообщение об ошибке

it_sram.c:200:3: error: missing braces around initializer [-Werror=missing-braces]
it_sram.c:200:3: error: (near initialization for 'data[0].byte') [-Werror=missing-braces]
it_sram.c:199:18: error: unused variable 'data' [-Werror=unused-variable]
it_sram.c: At top level:
cc1: error: unrecognized command line option "-Wno-misleading-indentation" [-Werror]
cc1: all warnings being treated as errors

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вам нужно две пары фигурных скобок {}:

struct my_bytes data[] = {
    { { 0x12, 0x34, 0x56, 0x78 } },
    { { 0x13, 0x35, 0x57, 0x79 } },
    { { 0x14, 0x36, 0x58, 0x7a } },
};

Внешнее для структуры, внутреннее для массива.

0 голосов
/ 13 января 2019

вы пропустили уровень {}

struct my_bytes data[] = {
  {{ 0x12, 0x34, 0x56, 0x78 } },
  {{ 0x13, 0x35, 0x57, 0x79 } },
  {{ 0x14, 0x36, 0x58, 0x7a } },
};

чтобы сделать это более заметным, если я изменю структуру на:

struct my_bytes {
  u8 byte[128];
  int a;
};

тебе нужно что-то подобное:

struct my_bytes data[] = {
  {{ 0x12, 0x34, 0x56, 0x78 }, 1 },
  {{ 0x13, 0x35, 0x57, 0x79 }, 2 },
  {{ 0x14, 0x36, 0x58, 0x7a }, 3 },
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...