Stdint.hとinttypes.hの違いは何ですか?
いずれも使用されていない場合、uint64_tは認識されませんが、どちらかが定義されたタイプです。
inttypes.hのウィキペディアの記事を参照してください
定義の最小限のセットにはstdint.hを使用します。 printf、scanfなどでこれらの移植可能なサポートも必要な場合は、inttypes.hを使用します。
C99の指定された幅の整数型(つまり、「int32_t」、「uint16_t」など)で作業する場合、このファイルを含めることが「最小要件」です。このファイルを含めると、これらの型の定義を取得しますになり、変数と関数の宣言でこれらの型を使用し、これらのデータ型で操作を実行できるようになります。
このファイルを含めると、stdint.hが提供するすべてを取得します(inttypes.hにはstdint.hが含まれているため)ですが、printfとscanfを実行するための機能も取得します =(および「fprintf、「fscanf」など)これらの型を移植可能な方法で使用します。たとえば、次のようにuint16_t整数をprintfできるように「PRIu16」マクロを取得します。
#include <stdio.h>
#include <inttypes.h>
int main (int argc, char *argv[]) {
// Only requires stdint.h to compile:
uint16_t myvar = 65535;
// Requires inttypes.h to compile:
printf("myvar=%" PRIu16 "\n", myvar);
}