たとえば、次のタイプの違いと、それらを使用する理由/時期は何ですか?
int64_t
int_least64_t
int_fast64_t
たとえば、次のタイプの違いと、それらを使用する理由/時期は何ですか?
int64_t
int_least64_t
int_fast64_t
int64_t
は正確に64ビット幅のタイプで、2の補数表現であり、パディングビットはありません。これは、たとえばバイナリインターフェイスでの作業に役立ちます。その存在はオプションであり、正確にその幅の整数型を持つアーキテクチャでのみ定義されます。
int_least64_t
は、実装で定義された表現とパディングを備えた、少なくとも64ビット幅の可能な最小タイプです。正確な64ビット幅が利用できない場合、たとえば特定の最小値の範囲が必要なアルゴリズムでの作業の場合は、幅が広くなる可能性があります。
int_fast64_t
少なくとも64ビット幅のタイプです。幅の広いタイプをCPUでより効率的に処理し、メモリフットプリントを速度と交換できれば、幅が広くなる可能性があります。
最初のものは非常に具体的ですが、オプションです。他の2つは、基盤となるハードウェアがトリッキーな場合、つまり、要求されたよりも広いタイプを受け入れる条件をコンパイラーに指示する場合に、コンパイラーに多少の余裕を与えます。
それらは、彼らが言うビットを保持するように設計されたタイプですが、CPUアーキテクチャ用に最適化されています。
これは、64ビットマシンでは、fast16_tのサイズが64ビットになる可能性があることを意味します。構造体をディスクに書き込む場合など、実際の型のサイズに依存するべきではありません。そのために「通常の」タイプを使用してください。