この回答に私の 10 セントを追加します:
u64
は「符号なし 64 ビット」値を意味するため、コードが実行/コンパイルされるアーキテクチャに応じて、実際に 64 ビット長になるように異なる定義を行う必要があります。
たとえば、x86 マシンでは、unsigned long
は 64 ビット長なので、u64
そのマシンの場合、次のように定義できます:
typedef unsigned long u64;
同じことが u32
にも当てはまります . x86 マシンでは、unsigned int
は 32 ビット長なので、u32
そのマシンの場合、次のように定義できます:
typedef unsigned int u32;
通常、typedef
が見つかります。 types.h
でのこれらの型の宣言 ソースをコンパイルするアーキテクチャに対応するファイル。
多くの場合、ハードウェアの近くで作業する場合や、データ構造のサイズ/形式を制御しようとする場合、整数のサイズを正確に制御する必要があります。
u8
に関しては vs uint8_t
、これは単純に Linux が <stdint.h>
よりも古いためです これは技術的には C99 主義ですが、私の経験では、ANSI-C / C89 モードであっても最新のコンパイラのほとんどで利用できます。