まず、uint16 などの型が定義されている場合、それらはどこで定義されているのでしょうか? それらは標準タイプではないため、独自のヘッダーで定義されます-おそらくあなたのものか、サードパーティのライブラリによって提供される可能性があります。その場合、そのコードの移植性と、他のアプリケーションでは意味をなさない可能性のある依存関係を作成しているかどうかを自問する必要があります。
もう1つの問題は、多くのライブラリ(賢明ではないがIMO)がUINT16、uint16、U16 UI16などのさまざまな名前でそのような型を定義しているため、型の一致を保証し、名前の衝突を回避するのがやや悪夢のようになることです。そのような名前が定義されている場合は、名前空間に配置するか、ライブラリ固有のプレフィックスを付けて、使用するために定義されたライブラリを示すのが理想的rtos::uint16
ですrtos_uint16
。
ISO C99 標準ライブラリは stdint.h で標準のビット長固有の型を提供するため、独自のヘッダーまたはサードパーティのヘッダーで定義されているものよりも、それらを使用することを優先する必要があります。これらのタイプには_t
接尾辞がありuint16_t
ます。C++ では、std::
名前空間に配置できます (ヘッダーが C99 で導入されたため、これは指定されていません)。
1] uint32でも十分な場合にuint16を使用することの使用/利点は何ですか?
stdint.h
'sを好むという以前のアドバイスとは別に、uint16_t
長さ固有の型を使用する正当な理由が少なくとも 2 つあります。
- 特定のハードウェア レジスタ幅に合わせます。
- 異なるアーキテクチャ間で共通の互換性のある API を適用するため。
2] 短いデータ型を使用すると、メモリ使用量が節約されますか (データの配置を考慮して)?
おそらくですが、メモリが問題ではない場合、それはそれらを使用する正当な理由ではありません. おそらく大規模なデータ オブジェクトや配列の場合は検討する価値がありますが、グローバルに適用する価値はほとんどありません。
3] 数バイトのメモリを節約する場合、最新のハードウェアで行うのは賢明なことでしょうか?
[2] を参照してください。ただし、 「最新のハードウェア」は必ずしも大きなリソースを意味するわけではありません。たとえば、RAM が数キロバイトしかない 32 ビット ARM Cortex-M デバイスがたくさんあります。これは、設計やアーキテクチャの時代というよりも、ダイ スペース、コスト、消費電力に関するものです。