Какова ожидаемая ошибка компилятора в приведенной ниже очень простой программе на 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