2010-11-21 14 views
2

ANSI C仕様では、サイズがintで、システムのワードサイズ(32ビット/ 64ビット)と一致する必要がありますか?Cの整数のサイズ

つまり、intに割り当てられたスペースに基づいて、システムのワードサイズを解読できますか?

+0

修正されたiircは1のsizeof charです –

答えて

6

intタイプのサイズは実装に依存しますが、16ビットより小さくすることはできません。 Minimum Type Limitsセクションhereを参照してください。

This Linuxカーネルの開発longタイプのサイズは、マシンのワードサイズであることが保証はなく、その文が偽である可能性が高いしていることをサイトclaims:私は標準のもののいずれかの確認を見つけることができなかった、とlong Win64システムでは32ビット幅です(これらのシステムではLLP64データモデルが使用されるため)。

+0

ワードサイズの明示的な議論はありません。 64ビット版のWindowsには、int型とlong型の32ビットがあります。私が知る限り、その決定はC標準に準拠しています。 –

+0

@Matthew、絶対に、私はその情報で私の答えを更新しました。 –

+0

édéric、Windows全体がC標準に準拠しているとは言えませんでした。 :)無視するC99の多くの部分があります。 –

3

言語仕様では、intがハードウェアプラットフォーム用の自然な「ワード」サイズを持つことが推奨されています。ただし、厳密には必須ではありません。気づいた場合は、32ビットから64ビットへのコードの移行を簡素化するため、基盤となるハードウェアプラットフォームが64ビットワードサイズであっても、intを32ビットタイプに保つ方が望ましい場合があります。

フレデリックが既に述べたように、いずれの場合でも、サイズは16値形成ビットより小さくてはならない。

+0

C99は "natural size"というフレーズを使用します。それは "単語"または "単語の大きさ"について言及していません。 –

0

システム提供のlimits.hヘッダーファイルを確認する必要があります。 INT_MAX宣言は、整数が持たなければならない最小サイズを逆算するのに役立ちます。詳細については、http://www.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html

+1

これは、sizeof(int)が何であるかを調べる方法の1つですが、質問に対するクロスプラットフォームコメントを提供していません(ANSI C仕様では、intのサイズがワードサイズ64ビット)?intに割り当てられたスペースに基づいてシステムのワードサイズを解読できますか?) –

1

元のintensionは、wordサイズ - 最も効率的なデータ処理サイズとなります。それでも、intのサイズがXビットであると仮定した膨大な量のコードが書き込まれ、コードが実行されるハードウェアが大きなワードサイズに移動すると、不注意に書かれたコードが破損することがあります。コンパイラのベンダーは顧客を幸せにしなければならないので、「OK、私たちは以前と同じ大きさのままにしておきますが、今はもっと長くするつもりです。あるいは、「ああ、あまりにも多くの人が私たちがもっと長く作っていると不平を言うと、sizeof(int)== sizeof(long)を残してlong long型を作成します。したがって、最近ではすべてが混乱しています。

ANSI C仕様では、intのサイズがシステムのワードサイズ(32ビット/ 64ビット)と同じであることを要求していますか?

かなり考えていますが、それを主張していません。

つまり、intに割り当てられたスペースに基づいてシステムのワードサイズを解読できますか?

実際にはありません。