0

我可以定义一个宏,如:

#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( 。

4

1 回答 1

6

我建议你使用可变参数宏

#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预处理器也会在这里抛出错误,因为参数和字符串之间没有逗号。

因此,如果您可以替换单个左括号,这个问题的答案就是不,您不能。

于 2012-08-15T08:32:42.027 回答