В этом коде есть интересная ошибка:
some_struct struct_array1[10] = {0};
some_struct struct_array2[10] = {0}
int i;
for (i = 0;
i < sizeof(struct_array1) / sizeof(struct_array1[0]);
struct_array1[i].value = struct_array2[i++].value = 1)
;
Для большинства компиляторов приведенный выше код приводит к установке поля «значение» всех структур в соответствующих массивах в 1.
Однако для одного конкретного компилятора (назовем его xcc) структуры в struct_array1 НЕ инициализируются правильно. Поле "значение" установлено в 0 для всех структур, что меня как-то удивило.
Следующий фрагмент кода работает должным образом на всех компиляторах:
for (i = 0;
i < sizeof(struct_array1) / sizeof(struct_array1[0]);
i++)
{
struct_array1[i].value = struct_array2[i].value = 1;
}
Теперь я полностью отключен, или компилятор-нарушитель "xcc" просто отображает ошибку?
Я не могу найти ничего, что отображало бы специфичное для реализации поведение в первом фрагменте кода; из того, что я понимаю, приращение постфикса должно иметь приоритет над назначениями, а назначения должны оцениваться справа налево. С первым фрагментом кода не должно быть ничего странного, кроме того, что он немного нечитабелен.