web-dev-qa-db-ja.com

stdint.hとinttypes.hの違い

Stdint.hとinttypes.hの違いは何ですか?

いずれも使用されていない場合、uint64_tは認識されませんが、どちらかが定義されたタイプです。

68
mahmood

inttypes.hのウィキペディアの記事を参照してください

定義の最小限のセットにはstdint.hを使用します。 printf、scanfなどでこれらの移植可能なサポートも必要な場合は、inttypes.hを使用します。

20
Ed Staub

stdint.h

C99の指定された幅の整数型(つまり、「int32_t」、「uint16_t」など)で作業する場合、このファイルを含めることが「最小要件」です。このファイルを含めると、これらの型の定義を取得しますになり、変数と関数の宣言でこれらの型を使用し、これらのデータ型で操作を実行できるようになります。

inttypes.h

このファイルを含めると、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);  
}
138
Mikko Östlund