2010-06-08 3 views
0

Я пытаюсь инициализировать структуру, которая заканчивается массивом [0] (здесь char iedata[0]) для фактической полезной нагрузки пакета. Если я пытаюсь инициализировать его рядный, как это:Предупреждение инициализации массива

struct some_packet pkt = { 
    .elem1 = blah, .elem2 = bleh, 
    .iedata = { 
     1, 2, 3, 4 
    } 
}; 

я получаю предупреждение от ССЗ:

warning: (near initialization for ‘pkt.iedata’) 

Есть ли хороший способ отметить, что это правильная инициализация?

ответ

1

Если вы можете скомпилировать в режиме C99, вы можете попробовать использовать стандартные гибкие массивы длины, а не нулевой длины хак: http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

Обратите внимание, что в GCC 3.0 и более новых, дополнительных записей в качестве инициализатора массива будут отброшены (согласно приведенной выше документации).

1

Поскольку вы используете инициализацию C99, почему бы не сделать элемент правильным FAM, то есть char data [];

Единственный способ создать правильную структуру с помощью FAM (или элемента структуры взлома) - это динамическое выделение правильного количества избыточного хранилища для последнего элемента, поэтому, как указывает предупреждение, ваша локальная инициализация недействительна.

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