vqwhiteboard

Well defined semantics

Is the following code guaranteed to terminate normally and successfully?

#include struct foo_s { union { struct { unsigned a : 10; unsigned : 6; }; struct { unsigned : 10; unsigned b : 6; }; struct { unsigned : 10; unsigned c : 6; }; }; }; int main { struct foo_s f; f.a = 0; f.b = 1; assert(f.a == 0); return 0; }

While answering a different question, the possibility was raised that assignment to a named bit-field in a structure that also contains an unnamed bit-field may cause arbitrary data to be written to those bits. C.11 §6.7.2.1 ¶12 states:

A bit-field declaration with no declarator, but only a colon and a width, indicates an unnamed bit-field.

Related Posts