として、より大きなデータ型を共有するため
、右隣同士にそれらを定義それはあなたが理解していないものですが、 "古典的な" Cの文献や構造の一般的な検索では見つけられないかもしれない、あなたの例では少なくとも4つのことが起こっています。これらは次のとおりである:
- ビットフィールドメンバー
- 指定初期化子
- 明示的な幅のデータ・タイプ
- ブールリテラル定数
ビットフィールドは、常に、ISO/ANSI Cにされているが、一般的に使用されていません。それらはメモリ効率のよいデータ構造をもたらすことができますが、ほとんどのアーキテクチャではアクセスするコード量が大きくなり、アクセスはアトミックではない可能性があります。これは、データが割り込みコンテキストまたはスレッドコンテキスト間で共有される場合に問題になります。また、ビットフィールドのパッキングは実装定義されているため、正確なビット位置が重要なアプリケーション(ハードウェアレジスタをオーバーレイする場合など)では、ポータブルでないコードが発生する可能性があります。
Designated initializersは、ISO C99に導入されました。 C99特有の文献はあまりありません。ほとんどのC文献は互換性のためにC90サブセットに先行しています。あなたは情報がそのようなものであることを知りたいならば、特にC99を検索すべきです。
明示的な幅のデータ型(この場合uint8_t
)、また、C99で導入されたが、単に標準ヘッダstdint.hにタイプを内蔵するので、あまりにC90コンパイラに実装することができるのtypedef
別名として実装されます。
同様にブールリテラルtrue
とfalse
は、C99にbool
データ型とともに導入されました。 C99においてbool
は_Bool
のtypedef
エイリアスであり、とfalse
の定義と共にstdbool.h
で定義されています。選択した場合はbool
とtrue
とfalse
を定義できますが、組み込みの_Bool
データ型がないため、他の整数型に別名を付けることになります。
'false'はマクロ展開でなければなりません。' C'は 'bool'型を持たないからです。 ':1'は' uint8_t'の内部にあることを意味し、1ビットだけが使用されます(この場合、0または1に似て真か偽か)。残りは構造体の初期化に過ぎません。 –
@hhachem Cにはbool型があります。 14年前にこの言語で導入されました。 – Lundin
@Lundin知っておきたい。私はいつもマクロを使用していました.Cのブール値で作業するとき –