简单的宏导致编译错误

时间:2012-10-25 15:01:59

标签: c macros compiler-errors

我正在尝试定义一个允许我传入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);

3 个答案:

答案 0 :(得分:9)

void Evaluate(char op)...

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

宏替换在编译时完成,但Evaluate的参数仅在运行时可用,因此宏扩展导致

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我知道你要去做什么......这有点像尝试unstringify。我很确定它不能按你想要的方式工作。你最好的选择是做一些事情:

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

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