【发布时间】:2019-10-18 00:59:49
【问题描述】:
我有 3 个非常相似的日志函数,它们将从不同的地方调用。
void INFO (char *format, ...) {
char log_buf[256] = {0};
va_list args;
va_start(args, format);
vsprintf(log_buf, format, args);
va_end(args);
LIB_LOG_INFO(log_buf);
}
void ERROR (char *format, ...) {
char log_buf[256] = {0};
va_list args;
va_start(args, format);
vsprintf(log_buf, format, args);
va_end(args);
LIB_LOG_ERROR(log_buf);
}
void DEBUG (char *format, ...) {
char log_buf[256] = {0};
va_list args;
va_start(args, format);
vsprintf(log_buf, format, args);
va_end(args);
LIB_LOG_DEBUG(log_buf);
}
我不能传递任何额外的参数,所以我不能执行 if-else 来调用不同的 LIB_LOG 函数。
是否可以编写一个通用宏,在编译时扩展为这 3 个函数定义?只有 LIB_LOG 函数的名称不同。
【问题讨论】:
-
使用 vsnprintf...
-
你试过什么?我想你可能想要the
##(preprocessor token glue) operator。 -
为什么不直接使用这些函数呢?它们没那么贵。如果必须,请将它们设为
static inline。 -
请edit 向我们展示使用代码的样子。那是使用宏的代码。
标签: c macros c-preprocessor