3

我正在尝试定义一个允许我传入 2 个数字以及一个运算符的宏。我希望宏对两个数字进行指定的操作并返回结果。

我的定义是:

#define GENERAL_OP(x,y,op) ((x) op (y))

当我打电话时效果很好

int result = GENERAL_OP(1, 2, -);

但是一旦我尝试向它传递一个字符(这是我在调用宏的通用函数中实际需要做的),如下例所示:

void Evaluate(char op)...

int result = GENERAL_OP(1, 2, op);
4

3 回答 3

9
void Evaluate(char op)...

int result = GENERAL_OP(1, 2, op);

宏替换是在编译前完成的,但是 的参数Evaluate只在运行时可用,所以宏展开导致

int result = ((1) op (2));

那里,并且op不是可以出现在那里的令牌(可能是未声明的标识符)。

于 2012-10-25T15:08:40.593 回答
0

预处理器在编译时运行,您不能使用op宏内部的值。

于 2012-10-25T15:10:07.397 回答
0

我明白你要做什么......这有点像试图unstringify。我很确定它不能按照你想要的方式工作。您最好的选择是执行以下操作:

void Evaluate(char op, int x, int y)
{
    int result;
    if(op == '-')
      GENERAL_OP(x, y, -);
    ...

但这并不能使它非常“普遍”......

于 2012-10-25T15:17:33.370 回答