0

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

#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”。有没有办法使用枚举来控制编译段?谢谢你。

4

1 回答 1

4

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

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

于 2013-05-09T10:10:54.247 回答