16ビットサイズの整数をCで宣言する必要があります。
shortとintのサイズはマシンに依存することを私は知っています。
使ってみまし"stdint.h",
たが、単純に使っているようです
typedef short int16_t
だから私の質問は:
私は何かが足りず、短いタイプは16ビット長を保証しますか?
いいえの場合、それを保証する代替手段はありますか?
つまり、すべてのマシンではなく、マシン上int16_t
で定義さshort
れます。
int16_t
16ビット整数型が絶対に必要な場所を使用してください。を提供するすべてのプラットフォームで適切に定義されますstdint.h
(C99またはcstdint
C ++をサポートするすべてのプラットフォームである必要があります)。
[編集]明確にするために、 " stdint.h
"ヘッダーファイルはC(またはC ++)コンパイラによって提供されるため、その内容はコンパイラ、バージョン、システム、CPUアーキテクチャなどによって異なる可能性があります。つまり、コンパイラスイートの作成者は知っています。正確には、どのタイプがどのシステムでどのサイズを持っているか。1つのシステムでそのファイルを見ると、特定のアーキテクチャ(Darwinx86_64のGCC4.2、WinNTAlphaのVisualStudio、Solaris IA32のICCなど)上の特定のOS上の特定のコンパイラの特定のバージョンの定義のみがわかります。 、など)。一部のシステム、特に組み込みシステムでは、タイプサイズが異なる場合があるため、short
が常に16ビットであるとは限らず、コンパイラはそのビット長に使用する適切なサイズを認識します。
別のシステムでファイルを見るとstdint.h
、定義が異なる場合や同じである場合がありますが、その目的は、保証されたビット長の整数型の定義を提供することです。
いいえ、16ビット長を保証するものではありshort
ません。基本的な整数データ型に関する唯一の保証は次のとおりです。
sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
sizeof(char) == 1
(注:achar
はまだ8ビットを超える可能性があります!)SHRT_MIN <= -32767
およびSHRT_MAX >= 32767
(暗黙short
は少なくとも16ビットです)INT_MIN <= -32767
およびINT_MAX >= 32767
(暗黙int
は少なくとも16ビットです)LONG_MIN <= -2147483647
およびLONG_MAX >= 2147483647
(暗黙long
は少なくとも32ビットです)LLONG_MIN <= -9223372036854775807
およびLLONG_MAX >= 9223372036854775807
(暗黙long long
は少なくとも64ビットです)(C99§5.2.4.2.1および付録E)
short
マシンでtypedefさint16_t
れているという事実は、aがマシンshort
で16ビットであることを意味します。定義が他の人のマシン(または同じマシン上の他のコンパイルでも)で同じになるという意味ではありません。
を含めると、署名された16ビット幅の型であることが保証されている何らかの方法で<stdint.h>
定義されます。int16_t
正確なサイズの整数が必要な場合は、それらの正確なサイズのタイプを使用してください。
各マシンには、これらの定義が使用できる場合とできない場合があります。
それを行うための唯一の本当に安全な方法は、構成チェックなどを使用することです。
ただし、int16_tが存在する(そしてconfigureがそれを検出する)場合、shortが実際に16ビットであるマシンではshortである必要があります。ショートのサイズが異なる場合、そのシステムはint16_tを他の何かに定義します。IE、int16_tが使用可能な場合は、2バイトの長さであると安全に想定できます。
short
少なくとも16-bit
幅が広いことが保証されているだけです。
それは16-bit
あなたのシステムでは広くなる可能性がありますが32-bit
、別のシステムではそうです。