丙 |处理宏函数中的多个参数
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");
我正在尝试做一个类似于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");