c++ - 如何使用枚举值通过预处理器指令直接编译

标签 c++

我想根据枚举值选择一部分代码进行编译。那么,我怎样才能将枚举的使用与预处理器指令结合起来来实现这个目标呢? 一个例子如下:

#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)。

关于c++ - 如何使用枚举值通过预处理器指令直接编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16459195/

相关文章:

c++ - windows是如何用c++创建的?

c++ - 准备 vim 环境以使用 clang-format

C++ 枚举和内联 header 函数

c++ - 宽字符和 Windows 函数的 cpp 问题

c++ - 虚拟成员函数的定义是否强制在同一翻译单元中对静态数据成员进行动态初始化?

c++ - 尝试将随机生成的数组与用户填充的数组进行比较

c++ - 使用 std::shared_ptr<void> 指向任何东西

c++ - 这段代码不是线程安全的,不是吗?

c++ - 派生为模板参数的基本转换

c++ - 为什么 operator<< 不适用于 operator- 返回的内容?