アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

unsigned long longはVCで動作するものでしょうか?

A 回答 (5件)

★『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つ先頭に付きます。
・以上。おわり。
    • good
    • 0

すでに 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=cpl …

x64で本格化する64ビットWindowsの時代(5):ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20051 …

STLでも問題続出ですし、VC6でなければならない理由がないのなら
早めに移行することをお勧めします。
    • good
    • 0

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を使うのも一つの手です。
    • good
    • 0

VC++6のヘルプをみたら


hyper
という64ビット整数のタイプがあるようです。
    • good
    • 0

long longは元々ANSI C標準じゃないから対応できないコンパイラもある。

(C99には入ったのかな?)
VCだと__int64が使えるんじゃないかな。
# 詳細はヘルプで確認して
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!