运营商&= 39; =='没有左操作数

时间:2014-07-13 07:41:23

标签: c++ gcc c-preprocessor

假设:

#if defined(TESTING) 
   #if (TESTING == UNIT_TEST)
            State<StateTypeEnum, EventTypeEnum>::_isIgnoredEvent = false;
            State<StateTypeEnum, EventTypeEnum>::_isInvalidEvent = false;
   #endif
#endif

定义了TESTINGUNIT_TESTTESTING == UNIT_TEST,为什么GCC会说

../testing/fsm/../../fsm/h/state.h:207:17: error: operator '==' has no left operand
    #if (TESTING == UNIT_TEST)
                 ^

1 个答案:

答案 0 :(得分:8)

看起来您只是定义了TESTING,而没有使用值(内联)或作为编译器命令行的一部分来定义它。

#define TESTING

它被定义,并且#if定义的测试为true,但是比较不起作用,因为它的宏替换值不是(或错误的类型)。

但是,如果你给它一个值,那么你的代码就可以了。

#define TESTING 1
#define UNIT_TEST 1

#if defined(TESTING) 
#if (TESTING == UNIT_TEST)
cout << "Unit test";
#endif
#endif