我可以定义一个宏吗:
#define ERROR_REPORT(LEVEL,SUB_LEVEL printf(
编译器提示这一行需要 ;
。有没有办法逃避“(”?
这是为了替换一个函数:
ERROR_REPORT(LEVEL,SUB_LEVEL
"error, there is an error %d\n",
error_id);
有一个C内置函数
printf("error, there is an error %d\n",
error_id);
编辑:我只想替换一个“(”,不包括“)”。我问这个的原因是已经有一些代码作为问题发布,所以我只想用 printf( 替换像 ERROR_REPROT(... 这样的一行。
最佳答案
我建议你使用 variadic macros :
#define ERROR_REPORT(LEVEL, SUB_LEVEL, ...) \
printf(__VA_ARGS__)
虽然你可以用任何你想要的东西来代替宏,但你定义错了:
#define ERROR_REPORT(LEVEL,SUB_LEVEL printf(
/* Error with missing `)` here ^ */
预处理程序需要右括号,否则会导致预处理阶段出错。
此外,当你使用这个宏时,你不能像你那样做:
ERROR_REPORT(LEVEL,SUB_LEVEL
"error, there is an error %d\n",
error_id);
预处理器也会在这里抛出错误,因为 SUB_LEVEL
参数和字符串之间没有逗号。
因此,如果您可以替换单个左括号这个问题的答案是不,您不能。
关于c - 是否可以定义一个 "(' 被转义的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11966160/