如何使编译失败,如果两个或没有定义预处理器宏
How to make compilation fail if both or none preprocessor macro is defined
朋友向我请教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
相关文章:
- 我希望定义两个具有相同代码的不同名称的库
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 为什么累积C++定义了两个模板
- 在两个.cpp文件之间定义全局类/结构指针
- 宏定义中的预处理器令牌两边有两个双引号
- 如何在两个不同的命名空间(但只写一次)中使用相同的标头定义,命名空间有不同的实现?
- 基于对象的两个属性的自定义比较器会引发异常
- 根据下面的作者,如果两个指针指向不同的数组,则比较的第一个版本将未定义
- 为什么我不能在同一行中定义两个相同类型的类的成员指针
- 为什么我无法比较自定义类类型的两个向量?
- 宏的定义从一个值创建两个参数
- 错误:当定义两个带有标头文件的类时,将重新定义类
- 为什么 for 循环不能定义两个作用域的变量?
- 比较两个用户定义的类型向量
- 为什么转换涉及两个用户定义的转换功能/构造函数
- 我如何防止静态类成员变量需要两个定义/声明
- 将两个#定义混合成一个单词
- 我在编译时得到这个错误:错误LNK2019:我在main中获得两个定义的函数
- 为什么std::vector::front有两个定义?(c++)
- 为什么运算符[]有两个定义?