假设:
#if defined(TESTING)
#if (TESTING == UNIT_TEST)
State<StateTypeEnum, EventTypeEnum>::_isIgnoredEvent = false;
State<StateTypeEnum, EventTypeEnum>::_isInvalidEvent = false;
#endif
#endif
定义了TESTING
,UNIT_TEST
和TESTING == UNIT_TEST
,为什么GCC会说
../testing/fsm/../../fsm/h/state.h:207:17: error: operator '==' has no left operand
#if (TESTING == UNIT_TEST)
^
答案 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