Для реализации, которая упаковывает 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;
}
Меня интересует ответ для C99 и C11, если есть основания полагать, что он там другой.
В C99 все, что я нашел, было 6.5: 2:
Между предыдущей и следующей точкой последовательности объект должен иметь свой хранящееся значение, модифицированное не более одного раза путем оценки выражения. [...]
Мне непонятно, какие последствия этот параграф имеет в программе выше.
Основываясь на большом количестве рандомизированных тестов, большинство компиляторов, похоже, генерируют код, где два назначения не мешают.