Как уже упоминалось в комментариях выше, part1
считается «использованным», поскольку вы присваиваете значения его полям (a
и b
) явно в следующих строках:
part1.a = 2;
part1.b = 3;
part2
никогда не используется, только инициализируется в строке:
struct complex part2 = {4, 5};
part3
более интересен, и я удивлен, что ваш компилятор не выдает ошибку.Делая следующее:
struct complex part3 = {part3.a = 7, part3.b = 8};
вы сначала присваиваете part3.a = 7
и part3.b = 8
, затем результаты этих присваиваний используются для инициализации структуры (part3.a = 7
оценивается как 7
, part3.b = 8
оценивается как 8
).По сути, он становится следующим набором операторов:
part3.a = 7;
part3.b = 8;
struct complex part3 = {7, 8};
Я бы ожидал, что ваш компилятор выдаст ошибку, потому что вы пытаетесь присвоить значения полям part3
до того, как вы его создали.Это неопределенное поведение.