Не инициализируется структура Си

введите сюда описание изображения

введите сюда описание изображения

Когда я просто инициализирую структуры к нулю внутри "мэйна" все в порядке всё работает.

Но когда когда этаже структура является вложенной в другую структуру, оно выдаёт ошибки: введите сюда описание изображения

введите сюда описание изображения

Если это делат даже не просто в структуре а в функции где я создаю объект даной структуры, всё еще выдаёт туже ошибку.

введите сюда описание изображения

Подскажите чем это вызвано и как всё-таки привести вложенную структуру к нулю.


Ответы (1 шт):

Автор решения: KoVadim

Не позволяет такого синтаксис. Вы втором случае Вы пытаетесь инициализировать переменную в объявлении структуры. А оно так не работает. Нет в С конструкторов, поэтому и такая конструкция не работает. Даже так не работает

struct private {
    int a = 0;
    int b = 1;
};

Но никто не мешает сделать так

struct private p = {0};

и все будет работать. Даже если есть вложенные структуры

в третьем случае Вы простите компилятор переменной присвоить ноль... а оно так не умеет. Самый надежный способ - позвать memset

memset(p, 0, sizeof(struct private)); 

Главное быть осторожным и не перепутать 2 и 3 параметр и не искать размер указателя, вместо размера структуры.

А первый пример работает, потому что там объявляется уже переменная (которая имеет место в памяти), а не структура (которая по факту чертеж памяти).

→ Ссылка