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

How to make compilation fail if both or none preprocessor macro is defined

本文关键字:两个 定义 处理器 预处理 失败 编译 何使 如果      更新时间:2023-10-16

朋友向我请教c++。我不使用c++,只使用c# (WP,WPF,WinForms)和Java(Android)。

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

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

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

你需要#error预处理器指令

这是一个预处理器指令:

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

我替他做这个任务。预处理器指令如下:

 #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