構造体内のビットフィールドの順序はプラットフォーム固有であることを読みました。異なるコンパイラ固有のパッキングオプションを使用する場合はどうなりますか?これにより、データが書き込まれるときに正しい順序で保存されることが保証されますか?例えば:
struct Message
{
unsigned int version : 3;
unsigned int type : 1;
unsigned int id : 5;
unsigned int data : 6;
} __attribute__ ((__packed__));
GCCコンパイラを搭載したIntelプロセッサでは、フィールドは示されているようにメモリに配置されていました。Message.version
バッファの最初の3ビットであり、その後にMessage.type
続きます。さまざまなコンパイラに相当する構造体パッキングオプションが見つかった場合、これはクロスプラットフォームになりますか?