2016-09-29 17 views
0

Visual StudioとLinux(gcc)環境でコンパイル/実行が必要なコードをいくつか記述しようとしています。MIN/MAXビジュアルスタジオで動作しないマクロ

#define __MAX(a,b) \ 
    ({ __typeof__ (a) _a = (a); \ 
     __typeof__ (b) _b = (b); \ 
    _a > _b ? _a : _b; }) 

:私はややあいまいなエラーを取得しています、と誰もが私が欠けているものに私を指すことができれば、私は思ったんだけど窓の私のファイルをコンパイルしようとすると...私は、標準的なマクロを持っていますそして、私はそれを起動しようとすると:

 int x = __MAX(0, 2); 

私はこの行を指して、Visual Studioでexpected an expressionエラーが発生します。私はビジュアルスタジオを初めて使っているので、これについて何が好きではないか分かりません。誰かが私が間違っていることを指摘できますか?

+5

質問に答えることはできませんが、100%移植可能な 'std :: min'と' std :: max'を使わないのはなぜですか? – NathanOliver

+0

@ NathanOliver残念ながら、 ''は 'min'と' max'のマクロを持っているので、 'std :: min'と' std :: max'はWindowsで動作しません。うん、それは陽気です。 IIRCの場合、 ' 'を含める前に定義しておくとマクロを無効にするマクロがあります。いずれにせよ、それは吸う。 – Mysticial

+0

@NathanOliver No.「」は、「min」と「max」という名前のマクロを定義します。だから彼らはマクロを 'std :: min'に置き換えて' std :: a Mysticial

答えて

4

これはタイプのものはgcc固有です。 cl.exe(Visual Studioが使用するMicrosoftのコンパイラ)を使用してコンパイルすると、そのようなことはありません。 https://social.msdn.microsoft.com/Forums/vstudio/en-US/984ae3e8-6391-45b9-8885-edb088da8bfa/will-msvc-support-a-typeof-operator-like-in-gcc?forum=vclanguage

+0

リンクのみの回答は醜いです(それを表す素敵な形を保つため)。 –

+0

ありがとうございます。私はそれが標準Cだと思ったが、そうは思わない。マクロのウィンドウ版を作成します。マクロに副作用が重複しないようにする方法があるとは思いませんか? – user2766918

+0

@ user2766918 Cだけを使いたい場合は、まずC++タグを使ってはいけません。あなたはgccをmingw経由でWindows上で使うことができます。 – Pavel

関連する問題