• ベストアンサー

VC6でlong longでエラー?

VC++6で、void test(unsigned long long a){} の場所で、error C2632: 'long' と 'long' の 2 つの型指定子のあいだにコードがありません。というエラーが発生します。 unsigned long longはVCで動作するものでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★『64Bit』の整数について ・『Java』言語では 64 ビット整数を正式にサポートしていますが、C 言語では処理系依存になります。 ・『VC6』にはあまり詳しくありませんが、『long long』はマイクロソフト社系では使えません。  その代わりに、妙な型が定義されていて『__int64』、『LONGLONG』、『LARGE_INTEGER』など3つほど  64ビット整数を扱うような型が存在します。 ●LARGE_INTEGER 共用体 typedef union union {  struct {   DWORD LowPart; // 飼い32ビット整数(符号なし)   LONG HighPart; // 上位32ビット整数(符号付き)  };  LONGLONG QuadPart; // 64ビット整数(符号付き) } LARGE_INTEGER, *PLARGE_INTEGER; ●関数 LONGLONG Int32x32To64( LONG a, LONG b ); // 掛け算(a×b=64ビットの符号付き整数を返す) ULONGLONG UInt32x32To64( DWORD a, DWORD b ); // 掛け算(a×b=64ビットの符号なし整数を返す) ULONGLONG Int64ShllMod32( ULONGLONG a, DWORD shift ); // 論理左シフト(a << shift の符号なし整数を返す) ULONGLONG Int64ShrlMod32( ULONGLONG a, DWORD shift ); // 論理右シフト(a >> shift の符号なし整数を返す) LONGLONG Int64ShraMod32( ULONGLONG a, DWORD shift ); // 算術右シフト(a >> shift の符号付き整数を返す) 最後に: ・詳しい関数の内容は、MSDN のマニュアルを見て下さい。 ・また、上記で紹介した共用体と関数は『Microsoft Visual Studio .NET 2003 C/C++』です。 ・最初に紹介した『__int64』は『_』『_』『int64』です。『_』が2つ先頭に付きます。 ・以上。おわり。

その他の回答 (4)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.5

すでに long longはVC6では使えないことは書かれていますが、 C99ではlong long はサポートすべき型の中にありますから、 C99をサポートしていると謳っている処理系ならば処理系依存ということはありません。 Visual Studio 2005のVC(VC8)ならばlong longが使えます。 C++ Reference Guide > A Tour of C99 http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=215&rl=1 x64で本格化する64ビットWindowsの時代(5):ITpro http://itpro.nikkeibp.co.jp/article/COLUMN/20051124/225141/?ST=cpu STLでも問題続出ですし、VC6でなければならない理由がないのなら 早めに移行することをお勧めします。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

long long型は、元々はGCCなどが共通の拡張としてサポートしていた型ですが、C99からは標準でサポートされるようになりました。C++の場合は、現時点では非標準ですが、次期改定時には標準に取り込まれることでしょう。 Visual C++に関してですが、long long型がサポートされるのはVisual C++.NET 2003からです。したがって、残念ながらVisual C++ 6.0ではサポートされていません。どうしても使いたいのであれば、__int64に置き換えるしかないわけですが、できれば__int64を直接使わず、typedefで何らかの別名を付けた方がよいでしょう。将来的な互換性を考えると、<stdint.h>または<cstdint>を自作して、std::tr1::int_least64_tを使うのも一つの手です。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

VC++6のヘルプをみたら hyper という64ビット整数のタイプがあるようです。

  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

long longは元々ANSI C標準じゃないから対応できないコンパイラもある。(C99には入ったのかな?) VCだと__int64が使えるんじゃないかな。 # 詳細はヘルプで確認して

関連するQ&A

専門家に質問してみよう