Битовые поля и точки последовательности

Для реализации, которая упаковывает 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:

Между предыдущим и следующим точка последовательности объект должен иметь свою сохраненное значение, измененное не более одного раза при вычислении выражения. [...]

Мне непонятно, какие последствия этот абзац имеет для указанной выше программы.

Основываясь на большом количестве рандомизированных тестов, большинство компиляторов, похоже, генерируют код, в котором два присваивания не мешают.

17
задан Pascal Cuoq 13 December 2013 в 13:57
поделиться