如何使用枚举值直接编译预处理器指令

How to use enum values to direct compilation with preprocessor directives

本文关键字:编译 预处理 处理器 指令 何使用 枚举      更新时间:2023-10-16

我想根据枚举值选择一部分代码进行编译。那么,我如何结合使用枚举与预处理器指令来实现这一目标?示例如下:

#include <iostream>
enum CODE {BINARY, PERMUTATION, BYVALUE};
#define ENCODING(x) (x)
using namespace std;
int main()
{
    CODE code = PERMUTATION;
#if ENCODING(code) == BINARY
    cout << "code: BINARY" << endl;
#elif ENCODING(code) == PERMUTATION
    cout << "code: PERMUTATION" << endl;
#elif ENCODING(code) == BYVALUE
    cout << "code: BYVALUE" << endl;
#endif
    return 0;
}

显然,这是不正确的得到我的目标,因为它总是采取第一个#if语句,并显示"code: BINARY"。是否有任何方法使用枚举来控制编译段?谢谢你。

您正在尝试使用运行时变量值控制编译(预处理)过程。这是不可能的。

您应该选择在预处理阶段编译的代码部分(使用#define),或者您可以编写switch语句,该语句将选择所需的编码(如果code是恒定的,那么优化编译器将有效地消除switch)。