混乱

2011-01-12 14 views
0

重複の可能性:
Any guaranteed minimum sizes for types in C?
C/C++: Size of builtin types for various compilers/platforms混乱

alt text 私はそれがいることを書かれている本で

C言語について質問がありますintのサイズ、cのfloatは1つの単語ad 2です ワード。 これらの単語はマシン固有です。ワードの16ビットマシンサイズが 16ビットであるから、cのintのサイズは16ビット、すなわち2バイトである。

ある意味では、cのintのサイズはオペレーティングシステム固有のものです。ウィンドウ内の ので、それは、int型のサイズは2バイトで、Linuxではint型のサイズはいくつかは、TCのためにint型のサイズは2バイト あるので、それはコンパイラ固有で言うとgccのは4バイト長である 4バイト

で提供しますそれは2つのバイトを示す

鉱山は、インテルペンティアムデュアルプロセッサ(それは32ビットであることを望む)および(システムプロパティに示されている)32ビット OSであり、iは、Cプログラムのintの表示サイズを作るとき、私は、TC を使用しています。 がマシンまたはOSに依存する場合、4バイトの長さを表示する必要があります

私は完全に混乱しています。私は私のPROBを解決する助けてください

(添付:私のシステムのプロパティは、コンピュータによって示される)intの大きさは間違いなくプラットフォーム固有のものです

+2

[C/C++:さまざまなコンパイラ/プラットフォームの組み込み型のサイズ ](http://stackoverflow.com/questions/1457431/cc-size-of-builtin-types-for-various-compilers-platforms)を参照してください。 )と[Cの型の保証最小サイズはどれですか? ](http://stackoverflow.com/questions/1738568/any-guaranteed-minimum-sizes-for-types-in-c)短い話ですが、それはコンパイラ固有のものですが、コンパイラはアーキテクチャーや標準で設定された最小限の制約を受けます。 –

+0

ありがとうMatthew ... –

答えて

3

- 通常それは32ビットで16ビットプラットフォーム上の16ビット、32ビットであります16ビットコンパイラは、32ビットプラットフォームでも16ビットのintを生成します。このようなコードは、32ビットOSによって特殊な下位互換モードで実行されます。

0

固定サイズの変数を持つstdint.hヘッダーファイルがあります。 int64_t, uint_16t、enc

+0

ur応答のためのDrakoshaありがとう.. –

+0

しかし、それはどういう意味ですか?申し訳ありませんが、あなたの答えは私の質問にどのように関係していますか? –

+0

私はあなたが書いたものから明らかな疑問はないと思っています。 – Drakosha

1

私はあなたが求めていることを理解していると思います。要するに、intのサイズは、使用しているコンパイラによって定義されています。

従来、特定のUnixプラットフォームでは、すべてのコンパイラが同じ「ABI」に準拠しています。これは、intがintであり、 "オペレーティングシステム固有"と "コンパイラ固有"の区別がないことを意味します。たとえば、open()を呼び出すと、コンパイラは文字通りカーネルのopen関数を呼び出し、戻り値はカーネルから返されたintです。

しかし理論的には、CライブラリはOSから離されています。コンパイラのintサイズは、マシンのネイティブ・ワード・サイズとは異なる場合があります。あなたはWIN32上で実行した場合たとえば、ネイティブファイルハンドルは32ビットですが、あなたのコンパイラは、16ビットまたは64ビットの整数型を有することができます。このシナリオでは、コンパイラのCライブラリをオペレーティングシステムのワードサイズから分離するレイヤと考えることができます。

1

最も正しい用語は、オペレーティングシステムYのコンパイラXは、プリミティブ型がありますサイズどのような独自のアイデアを持っていることを意味し、「特定の実装」になります。

したがって、32ビットシステムでは2バイトのintを使用できます。書籍の「言葉」についての長い言い伝えは、コンピュータの仕組みに慣れ親しむためのものであり、Cコンパイラの実装方法の要件ではありません。

0

ビットで最小サイズを決定する言語標準(ドラフトn1256、§ 5.2.4.2)によって定義されています各タイプの値の最小範囲が存在します。 charintが広い、フロートは、コンパイラは広い必要以上のタイプではなく、より狭いを使用することができる等、広い少なくとも 32ビットでなければならない少なくとも 16ビットである必要があり、広い少なくとも 8ビットでなければなりません。

プラットフォームのタイプサイズを確認するには、標準ヘッダーlimits.hfloat.hを確認してください。