В самой простой программе C ниже, какова ожидаемая ошибка компилятора? НКУ дает мне 1, тогда как MSVC 2013 дает мне 2.Какое значение следует ожидать от макроса, установленного в результате определения()?
#define foo
#define bar (defined(foo))
#if bar
#error 1
#else
#error 2
#endif
Мои вопросы, надеюсь, столь же просто:
- Что делает C спецификации говорят о значении определенного()? Я не могу представить , чтобы найти что-нибудь, что говорит о настройке его значения на другой макрос .
- Фактический код не является чем-то, что у меня есть, и «#if bar» используется повсюду. Каков самый простой способ изменить #define, чтобы #if-бар работал как «ожидаемый» в MSVC? Единственное, что я могу придумать, это расширить его:
.
#ifdef foo
#define bar 1
#else
#define bar 2
#endif
Я сам тестировал это, это bizzare. Я не могу себе представить, что думает MSVC, что он здесь делает. –