我可以定义像:
这样的宏#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);
编辑:我只想替换一个“(”,不包括“)”。我之所以这样说的原因是已经有一些代码已经发布了问题,所以我只想替换一行像ERROR_REPROT(...与printf(。
答案 0 :(得分:6)
我建议您使用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
参数和字符串之间没有逗号。
所以问题的答案是否可以替换单个左括号,根本不是,你不能。