我正在尝试定义一个允许我传入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);
答案 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, -);
...
但这并不能使它“非常”......