我在我的代码中有多种类型的调试语句 - 比如DEBUG("abcd");
或DEBUG("abc %d def", val)
,它们被翻译并打印到文件中。
现在,我想将它们全部转换为不同类型的日志记录,这需要使用具有声明的函数,如< - p>
WRITE(char *string);
用法:WRITE(L"abcd")
等。
因为这个调试语句的用法很大,所以我希望使用宏来转换它。可以做到这一点;还假设DEBUG
函数也用于接受格式说明符吗?
答案 0 :(得分:0)
也许您正在查看:#define DEBUG(str,...) WRITE(str,__VA_ARGS__)
答案 1 :(得分:0)
你可能想要类似gnu函数的东西
int asprintf(char **strp, const char *fmt, ...);
这是一个函数,它在*strp
中返回一个足够大的分配字符串,用于保存您的打印字符串。假设您的WRITE
和DEBUG
宏仅用于将它们用作语句而非内部表达式的位置,则可以执行
#define DEBUG(...) \
do { \
char* strp = 0; \
asprintf(&strp, __VA_ARG__); \
WRITE(strp); \
free(strp); \
} while(0)
如果您的平台没有asprintf
,您可能会想出使用snprintf
的实现,并根据需要放大要返回的字符串。