Этого кода имеет интересную ошибку:Порядка оценки назначения (я нашел свою первую ошибку компилятора?)
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;
}
Теперь я полностью покинуть здесь, или же виновный компилятор «ХСС» просто отображает ошибку?
Я не могу найти ничего, что отображает поведение, специфичное для реализации, в первом фрагменте кода; из того, что я понимаю, приращение постфикса должно иметь приоритет над назначениями, а присваивания должны оцениваться справа налево. Не должно быть ничего странного с первым фрагментом кода, за исключением того, что он нечитабелен.
Это не ошибка компилятора, это ошибка программиста: код включает неопределенное поведение и поэтому недействителен. C – Christoph
http://catb.org/~esr/faqs/smart-questions.html#id382249 –
Я предлагаю вам google up undefined поведение. –