私が考える 2 つの使用例がshort
思い浮かびます。
- サイズが 16 ビット以上の整数型が必要です
- サイズが正確に 16 ビットの整数型が必要です
最初のケースでは、int
は少なくとも 16 ビットであることが保証されており、最も効率的な整数データ型であるため、 を使用しますint
。short
2 番目のケースでは、標準ではのサイズが正確に 16 ビットであることを保証していないため、int16_t
代わりに使用します。では、短いとはどのような用途ですか?
私が考える 2 つの使用例がshort
思い浮かびます。
最初のケースでは、int
は少なくとも 16 ビットであることが保証されており、最も効率的な整数データ型であるため、 を使用しますint
。short
2 番目のケースでは、標準ではのサイズが正確に 16 ビットであることを保証していないため、int16_t
代わりに使用します。では、短いとはどのような用途ですか?
short
16 ビット整数を持つ C99 環境で使用する理由はありません。int16_t
、int_fast16_t
またはint_least16_t
代わりに使用できます。
使用する主な理由はshort
、これらの型を提供しない C89 以前の環境との下位互換性、またはshort
パブリック API の一部として使用するライブラリとの下位互換性、<stdint.h>
それ自体を実装するため、または 16 ビット整数を持たないプラットフォームとの互換性のためです。彼らの C コンパイラは提供していませんint16_t
。
ISO/IEC 9899:1999 (C99) はヘッダー<stdint.h>
を追加<inttypes.h>
し、必要なものを提供します。
int16_t
定義されていない可能性がありますが、実装に 16 ビット (正確に) の整数型がある場合はint16_t
、そのエイリアスになります。int_least16_t
少なくとも 16 ビットを保持する最小の型です。いつでもご利用いただけます。int_fast16_t
少なくとも 16 ビットを保持する最速の型です。いつでもご利用いただけます。他のサイズについても同様: 8、16、32、64。
intmax_t
最大精度の整数型もあります。もちろん、これらのそれぞれに unsigned 型もあります:uint16_t
など.
これらのタイプは、C2011 にも存在します。それらは C89 または C90 には存在しませんでした。ただし、ヘッダーは、C99 のサポートを提供していないと主張している MS Visual C のようなコンパイラであっても、ほとんどのコンパイラで何らかの形で利用できると思います。
<stdint.h>
ヘッダーとヘッダーの POSIX 2008 バージョンへのリンクを示したことに注意してください<inttypes.h>
。POSIX は、C 標準にはないルールを実装に課しています。
§7.18.1.1 正確な幅の整数型
¶1 typedef 名
int
N_t
は、幅 N、パディング ビットなし、および 2 の補数表現を持つ符号付き整数型を指定します。したがって、int8_t
正確に 8 ビット幅の符号付き整数型を示します。¶2 typedef 名
uint
N_t
は、幅 N の符号なし整数型を指定します。したがって、uint24_t
正確に 24 ビット幅の符号なし整数型を示します。¶3 これらのタイプはオプションです。ただし、実装が幅 8、16、32、または 64 ビットの整数型を提供する場合、対応する typedef 名を定義する必要があります。
はい、本当に特定のデータ サイズが必要な場合は、int16_t、int32_t などを使用します。
int16_t は通常、short (または 16 ビットにマップされるもの) からのプラットフォーム固有の typedef です。32 ビット マシンでは int16_t を short として typedef することができ、16 ビット マシンでは int16_t を int として typedef することができます。
ANSI C は、型の最小値の範囲を指定します。確実なのは最初のケースだけです。2番目ではありません。
非常に大きな配列がある場合は、ショーツを使用することをお勧めします。
ユニオンの一部として他のデータの一部を選択するのに役立つ場合があります。