丙 |处理宏函数中的多个参数

C | Handling multiple arguments in macro function

我正在尝试做一个类似于printf()的函数,我希望它有多个参数以便我可以在打印时使用它们,大致如下:

void PRINT_RED(string, ...) {
  fprintf(stderr, "3[91m");
  fprintf(stderr, "%s", string, __va_arg_pack());
  fprintf(stderr, "3[0m");
}

考虑到我希望它具有以下示例API PRINT_RED("%s %s %d", string1, string2, int1);.

但是作为一个宏,所以我尝试了:

#define PRINT_RED(string, ...) \
  fprintf(stderr, "3[91m"); \
  fprintf(stderr, "%s", string, __va_arg_pack()); \
  fprintf(stderr, "3[0m");

显然 __va_arg_pack() 只能在内联函数中定义...有人可以指导我如何处理宏函数中的多个参数吗?

您要查找的是宏 __VA_ARGS__,它转换为传递给宏的变量参数。

#define PRINT_RED(string, ...) \
  fprintf(stderr, "3[91m"); \
  fprintf(stderr, "%s", string, __VA_ARGS__); \
  fprintf(stderr, "3[0m");