2

以下の非常に単純な C プログラムで、予想されるコンパイラ エラーは何ですか? gcc は 1 ですが、MSVC 2013 は 2 です。

#define foo
#define bar (defined(foo))

#if bar
#error 1
#else
#error 2
#endif

私の質問は、うまくいけば同様に単純です:

  1. C 仕様は defined() の値について何と言っていますか? その値を別のマクロに設定することについて話しているものは何も見つからないようです。
  2. 実際のコードは私が制御できるものではなく、「#if バー」がいたるところで使用されています。#if バーが MSVC で「期待どおり」に機能するように #define を変更する最も簡単な方法は何ですか? 私が考えることができる唯一のことは、それを展開することです:

.

#ifdef foo
#define bar 1
#else
#define bar 2
#endif
4

2 に答える 2