在下面非常简单的 C 程序中,预期的编译器错误是什么?gcc 给了我 1 而 MSVC 2013 给了我 2。
#define foo
#define bar (defined(foo))
#if bar
#error 1
#else
#error 2
#endif
我的问题希望同样简单:
- C 规范对defined() 的值有何规定?我似乎找不到任何关于将其值设置为另一个宏的内容。
- 实际代码不是我可以控制的,并且到处都在使用“#if bar”。更改#define 以使#if 栏在MSVC 中按“预期”工作的最简单方法是什么?我唯一能想到的就是扩展它:
.
#ifdef foo
#define bar 1
#else
#define bar 2
#endif