2016-09-12 5 views
3

У меня есть структура, которая выглядит примерно так:Инициализация элемента массива элементов структуры по имени

typedef struct 
{ 
    uint32_t a; 
    uint32_t b; 
    uint32_t c[5]; 
    uint32_t d; 
} MY_STRUCT_T; 

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

Если c не массив, я мог бы сделать:

static MY_STRUCT_T my_struct = {.b = 1}; 

И я знаю, что могу это сделать:

static MY_STRUCT_T my_struct = {.c[0]=5, 
    .c[1]=5, 
    .c[2]=5, 
    .c[3]=5, 
    .c[4]=5}; 

, но я, если интересно был более изящный синтаксис которого я не знаю: Что-то вроде:

static MY_STRUCT_T my_struct = {.c[] = {5,5,5,5,5}}; 

Я прочитал следующее, но они не отвечают на этот вопрос:
Initializing a struct to 0
Initialize/reset struct to zero/null
A better way to initialize a static array member of a class in C++ (const would be preferred though)
How to initialize all members of an array to the same value?

+0

Маленькой разницы между этим и [Как инициализировать все элементы массива в то же значение] (http://stackoverflow.com/q/201101/2410359), кроме части '.c ='. – chux

ответ

3

Так что я написал этот вопрос, а затем экспериментировал на некоторое время и обнаружил, что следующий будет работать:

static MY_STRUCT_T my_struct = {.c={5,5,5,5,5}}; 
+0

Я думаю, что 'static MY_STRUCT_T my_struct = {.c = {5}};' работает тоже. –

+0

@ Jean-FrançoisFabre: Это будет инициализировать все, кроме первого элемента элемента 'c' array с нулями (как и в обычной инициализации массива). –

+0

@GrzegorzSzpetkowski: Я думаю, что я пропустил логику :( –

0

ОП имеет 3 цели: 1) размер массива поля фиксированный, 2) initializ ation как {7,7,7,7,7} фиксированная ширина, 3) c к ненулевому значению. Поскольку № 1 и № 2 имеют свои размеры независимые кодированные, 2 из 3 целей могут быть выполнены, но не все 3 - это сложно.

Что нужно предупредить/предупредить о MY_STRUCT_T my_struct = {.c = {5,5,5,5,5}};, не встречая голов, должно быть uint32_t c[5]; позже uint32_t c[6];? Не важно.

Не имея ремонтопригоден кодирование парадигмы, считает this - copy one by one

+0

Да, сводка правильная. Эта связанная идея - это не идея, потому что мне действительно нужно называть этот сегмент кода цикла' for'. – Frederick

Смежные вопросы