Для реализации, которая упаковывает f0
и f1
в один и тот же байт, определена ли программа ниже?
struct S0 {
unsigned f0:4;
signed f1:4;
} l_62;
int main (void) {
(l_62.f0 = 0) + (l_62.f1 = 0);
return 0;
}
Меня интересует ответ для С99 и для С11 если есть основания думать что там по другому.
В C99 все, что я нашел, было 6,5: 2:
Между предыдущей и следующей точкой последовательности сохраненное значение объекта должно быть изменено не более одного раза при вычислении выражения. [...]
Мне непонятно, какие последствия этот абзац имеет для программы выше.
Судя по большому количеству рандомизированных тестов, большинство компиляторов генерируют код, в котором два назначения не мешают друг другу.