2017-02-19 32 views
0

Давайте предположим, что я структура определяется как:Как инициализировать массив в массиве структур?

typedef struct _TStruct { 

    uint Values[3]; 

} TStruct; 

Затем я определяю массив структур:

TStruct Data[3]; 

Как правильно инициализировать массивы в этом массиве структур?

+0

цитируемой DUP и [ Ошибка GCC 53119] (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119), кажется, e при использовании '{0}' с отсутствующими фигурными скобками. Этот вопрос, похоже, не инициализируется таким образом. – jww

ответ

2

Чтобы правильно инициализировать массив в массиве структур, которые необходимо сделать следующее:

typedef struct _TStruct { 

    uint Values[3]; 

} TStruct; 

TStruct Data[3] = { 

    {{ 0x86, 0x55, 0x79 }}, {{ 0xaa, 0xbb, 0xcc }}, {{ 0x76, 0x23, 0x24 }} 

}; 

Обратите внимание на двойные скобки вокруг каждой группы значений. Дополнительная пара скобок имеет важное значение, чтобы избежать попадания в следующую Gcc ошибку (только тогда, когда -Wall флаг присутствует, именно это «обнаружен» по gcc-Wmissing-braces флаг):

предупреждения: отсутствуют скобки вокруг инициализатора

Примечание:

  1. Использование двойных скобок {{ }} не меняет раскладку данных в памяти

  2. Это предупреждение не появляется на MS Visual компилятором Studio C++

Смотрите также:

How to repair warning: missing braces around initializer?

GCC Bug 53319

+0

Ваш Q & A является дубликатом связанных вопросов и ответов, которые вы предоставили. Зачем это делать? –

+0

@ Jean-FrançoisFabre Не было вопросов/ответов на SO, показывающих, как инициализировать массив в массиве структур –

+0

Обратите внимание, что удаление фигурных скобок также верно в соответствии со стандартом C. Дополнительная привязка только «требуется» для работы с дефектом компилятора. –