次のコードは、正常に正常に終了することが保証されていますか?
#include <assert.h>
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;
}
別の質問に答えているときに、名前のないビットフィールドも含む構造体の名前付きビットフィールドへの代入により、任意のデータがそれらのビットに書き込まれる可能性が提起されました。C.11 §6.7.2.1 ¶12 には次のように記載されています。
宣言子がなく、コロンと幅のみのビットフィールド宣言は、名前のないビットフィールドを示します。
これについての私の解釈は、名前のないビットフィールドは単なる通常のビットフィールドであり、唯一の違いは、これらのビットの値を名前で直接取得できないことです。「as-if」ロジックを使用してそれから外挿し、それらのビットに任意のデータを割り当てることが実装で許可されていますか?