简单的宏导致编译错误

Joh*_*n K 3 c macros compiler-errors

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

我的定义是:

#define GENERAL_OP(x,y,op) ((x) op (y))
Run Code Online (Sandbox Code Playgroud)

我打电话时工作正常

int result = GENERAL_OP(1, 2, -);
Run Code Online (Sandbox Code Playgroud)

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

void Evaluate(char op)...

int result = GENERAL_OP(1, 2, op);
Run Code Online (Sandbox Code Playgroud)

Dan*_*her 9

void Evaluate(char op)...

int result = GENERAL_OP(1, 2, op);
Run Code Online (Sandbox Code Playgroud)

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

int result = ((1) op (2));
Run Code Online (Sandbox Code Playgroud)

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