【问题标题】:C | Handling multiple arguments in macro functionC |处理宏函数中的多个参数
【发布时间】:2021-12-25 18:24:51
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c macros


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-08
      • 2017-12-08
      • 2021-11-16
      • 1970-01-01
      • 2023-03-08
      相关资源
      最近更新 更多