对于打包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:
在前一个序列点和下一个序列点之间,对象的存储值最多只能通过表达式的评估修改一次。[...]
我不清楚这一段对上述程序有什么影响。
基于大量随机测试,大多数编译器似乎生成了两个分配不干扰的代码。