c - 是否可以定义一个 "(' 被转义的宏?

标签 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);

编辑:我只想替换一个“(”,不包括“)”。我问这个的原因是已经有一些代码作为问题发布,所以我只想用 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/

相关文章:

c - Mono embed API 在运行时修改方法体

c - 不知道如何正确接收和使用用户输入

c - 从非阻塞套接字接收部分数据

c++ - 在 C++ 中用前导零更改十六进制数的位,(C)

c - 如何使用 IPP 将 8 位灰度图像转换为 NV12(有限范围)颜色空间

c - 从目标文件中提取单个过程?

c - 每个链接列表都有较小的数组,这在 C 中有意义吗?

c - 如何在另一个结构体中初始化一个结构体的数组?

c - 有没有办法在 C 中倒带标准输入?

c - "warning: control reaches end of non-void function"但实际上该函数被声明为 int 并返回一个 int