- ベストアンサー
C/C++の型について
Windows2000で、VC++6で型のサイズを調べると、以下のとおりでした。 int 4バイト long 4バイト long int 4バイト 環境はWindows2000, CPUはCeleron1200Mhzです。 環境やコンパイラによって型のサイズや呼び方も変わるのでしょうか? VisualBasic6用のDLLをVCで作成した記憶があるのですが、そのときは VB6のInteger型が2バイトだったので C(Ver7.0?????)側も2バイトだったと思います。 今VB6のInteger型にあわせる場合はC側ではshortでないとおかしくなるのでしょうか? 私はブランクがあり、そのあたりの事情がよくわかっていません。 あるサイトのページを見ると intが2バイトで、 long intは同じ4バイトで long long intという型もありました。VC6++では long long intは無いようです。 http://seclan.dll.jp/c99d/c99d05.htm VC2005++やGCCでは8バイトの型はあるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
★アドバイス >VC6++では long long int ↑ 『long long』は64ビットの整数型です。 VC++2003.NET や VC++2005 では使えます。 でも C99 を完全にサポートしているわけではありません。 また printf 文でも VC++2003.NET では『%I64d』『%I64u』などを使います。 VC++2005 では『%lld』『%llu』を使います。 ・32ビット環境では int 型は 32 ビット(4バイト)です。 他にも short、unsigned short、signed short は2バイト(16ビット) long、unsigned long、signed long は4バイト(32ビット) long long、unsigned long long、signed long long は8バイト(64ビット) になります。 ・それから 『short』と『short int』や 『long』や『long int』は同じ意味です。 単に int を省略できるだけです。 というより省略すると int 型になるのです。 私も普段は long、short と記述しています。 正しくは long int、short int になります。 『long』、『short』は修飾子です。 >VC2005++やGCCでは8バイトの型はあるのでしょうか? ↑ int型に対するバイト数ですか? 32ビット環境では int、unsigned int は4バイトです。 64ビット環境では int、unsigned int が8バイトになります。 ・int型以外にもポインタのビット数(バイト)も環境によっていろいろと変ります。 int型が 32 ビットでもポインタだけは 64 ビットだったりもします。 質問にあるリンクを読めばポインタのことも載っているはずです。 場所は忘れましたが…。 >環境やコンパイラによって型のサイズや呼び方も変わるのでしょうか? ↑ 環境によって int 型やポインタのサイズは変ります。 コンパイラ(処理系)やコンパイラ・オプションでも変ります。 でも呼び方は変らないと思いますよ。 ・以上。下の『参考URL』もどうぞ。
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
規格上は ・char 1個が 1バイト ・1 = sizeof(char) ≦ sizeof(short) ≦ sizeof(int) ≦ sizeof(long) (≦ sizeof(long long)) ・sizeof(unsigned なんちゃら) = sizeof(signed なんちゃら) = sizeof(なんちゃら) ・CHAR_BIT ≧ 8 ・sizeof(short) * CHAR_BIT ≧ 16 ・sizeof(long) * CHAR_BIT ≧ 32 ・sizeof(long long) * CHAR_BIT ≧ 64 としか決まっていません. だから, 「int が 2バイト」の環境もあれば「int も long も 4バイト」という環境があります. 「long が 1バイト」という環境も理論上存在しうるんだけど, 見たことはありません.