stdint.h と inttypes.h の違いは何ですか?
それらのいずれも使用されていない場合、 uint64_t は認識されませんが、どちらでも定義された型です。
int32_t
C99 の指定された幅の整数型 (つまり など)を使用する場合は、このファイルを含めることが「最小要件」ですuint16_t
。このファイルをインクルードすると、これらの型の定義が得られるため、変数や関数の宣言でこれらの型を使用したり、これらのデータ型を操作したりできます。
このファイルをインクルードすると、stdint.h が提供するすべてのものを取得できます(inttypes.h には stdint.h が含まれているため)。ただし、これらの型を使用してand (and 、など) を実行するための機能もポータブルな形式で取得できprintf
scanf
ます。仕方。たとえば、次のようなことができるようにマクロを取得します。fprintf
fscanf
PRIu64
printf
uint64_t
#include <stdio.h>
#include <inttypes.h>
int main (int argc, char *argv[]) {
// Only requires stdint.h to compile:
uint64_t myvar = UINT64_C(0) - UINT64_C(1);
// Requires inttypes.h to compile:
printf("myvar=%" PRIu64 "\n", myvar);
}
inttypes.hを使用する理由の 1 つprintf
は、たとえば、Linux ではなくWindowsであるということuint64_t
です。したがって、(inttypes.h ではなく) stdint.h のみをインクルードする場合、上記のコードを記述して Linux と Windows 間の相互互換性を維持するには、次のことを行う必要があります (醜い #ifdef に注意してください)。 :long unsigned
long long unsigned
#include <stdio.h>
#include <stdint.h>
int main (int argc, char *argv[]) {
// Only requires stdint.h to compile:
uint64_t myvar = UINT64_C(0) - UINT64_C(1);
// Not recommended.
// Requires different cases for different operating systems,
// because 'PRIu64' macro is unavailable (only available
// if inttypes.h is #include:d).
#ifdef __linux__
printf("myvar=%lu\n", myvar);
#elif _WIN32
printf("myvar=%llu\n", myvar);
#endif
}
inttypes.h については、ウィキペディアの記事を参照してください。
最小限の定義セットには stdint.h を使用します。printf、scanfなどでこれらの移植可能なサポートも必要な場合は、inttypes.hを使用してください。