如果定义了两个或没有预处理器宏,如何使编译失败

时间:2014-03-17 13:53:02

标签: c++ macros preprocessor-directive

朋友向我求助于C ++。我不使用C ++只有C#(WP,WPF,WinForms)和Java(Android)。

他所拥有的任务的一部分是当定义宏STAR时,他应该在定义宏EQ时用*(星星)绘制一个圣诞节树,他假设用=(赋值运算符)绘制它。如果定义了两者或没有定义,则编译失败。绘制christmass树在任何语言中都很容易,但我对这些预处理器宏有问题。

#define STAR *
#define EQ =

#if !(defined(STAR) ^ defined(EQ)) 
   FAIL TO COMPILE?
#endif

如何在代码中检查定义了哪个宏并将其值分配给char character;

3 个答案:

答案 0 :(得分:15)

您需要#error预处理器指令

答案 1 :(得分:7)

有一个预处理器指令:

#error "One and only one of STAR or EQ should be defined"

答案 2 :(得分:2)

我为他做了这个任务。预处理器指令如下所示:

 #define STAR "*"
// #define EQ "="
 #if !(defined(STAR) ^ defined(EQ))
      #error "STAR XOR EQ have to be defined"
 #elif (defined(STAR))
        #define CHARACTER STAR
 #elif (defined(EQ))
        #define CHARACTER EQ
 #endif