是否可以定义一个“('被转义?

时间:2012-08-15 08:27:29

标签: c

我可以定义像:

这样的宏
#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(。

1 个答案:

答案 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参数和字符串之间没有逗号。

所以问题的答案是否可以替换单个左括号,根本不是,你不能。