Извините за плохой английский.
Предположим, код (C99 или новее):
typedef struct {
int a, b;
} foo_t;
foo_t f = { .a = 1, .b = 2 };
f = (foo_t){ .b = 3 };
Что такое f.a
сейчас? Говорит ли стандарт C что-нибудь об этом?
Я знаю, что для частичной инициализации стандарт гарантирует, что все неинициализированные элементы будут инициализированы "соответствующим нулем" (0
для целых чисел, 0.0
для чисел с плавающей запятой, NULL
для указателей и т. д.). Но последний оператор не является инициализацией (как я понимаю), потому что f
уже существует. Я смущен.
a
будет равно 0. - person   schedule 08.01.2013