Как инициализировать поля массива структуры нулями - PullRequest
3 голосов
/ 25 апреля 2019

У меня есть следующая структура

typedef struct mainstruct {
    uint32_t        var1;
    field_struct    var2[2];
    uint32_t        var3;
} main_struct;

где field_struct:

typedef struct fieldstruct {
    uint8_t     var11[8];
    uint32_t    var22; 
    uint32_t    var33; 
    uint8_t     var44[16];
    uint8_t     var55[16];
    uint8_t     var66[16];
} field_struct;

Как я могу инициализировать все поля field_struct в main_struct для всех нулей?Также var1 и var2 необходимо инициализировать для определенных значений.

Ответы [ 3 ]

4 голосов
/ 25 апреля 2019

Если вы частично инициализируете структуру, остальные члены, которые вы не инициализируете явно, обнуляются. Так что достаточно просто инициализировать те члены, которым нужны конкретные значения:

main_struct ms = 
{
  .var1 = something,
  .var2 = { something_else },
};
1 голос
/ 25 апреля 2019

Как я могу инициализировать все поля field_struct в main_struct для всех нулей?

Если у вас нет доступа к назначенным инициализаторам (C99 и C11), выможно просто инициализировать нулем всю структуру, а затем инициализировать все остальное, что вам нужно:

main_struct s = {0};
s.var1 = ...;

Оптимизатор будет делать правильные вещи.Конечно, если вы не хотите инициализировать все, вам придется вручную инициализировать только те, которые вам нужны.

0 голосов
/ 25 апреля 2019

Если вы пытаетесь установить значения по умолчанию для членов структуры, вы просто не можете этого сделать: структуры - это типы данных, а не экземпляры типов данных.

Вместо этого, если вы хотите инициализировать только элементы экземпляра вашего типа данных, вы можете использовать метод, описанный в Ответ Лундина .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...