使用宏来转换打印语句

时间:2013-12-01 09:21:35

标签: c macros format-specifiers

我在我的代码中有多种类型的调试语句 - 比如DEBUG("abcd");DEBUG("abc %d def", val),它们被翻译并打印到文件中。

现在,我想将它们全部转换为不同类型的日志记录,这需要使用具有声明的函数,如< - p>

WRITE(char *string);

用法:WRITE(L"abcd")等。 因为这个调试语句的用法很大,所以我希望使用宏来转换它。可以做到这一点;还假设DEBUG函数也用于接受格式说明符吗?

2 个答案:

答案 0 :(得分:0)

也许您正在查看:#define DEBUG(str,...) WRITE(str,__VA_ARGS__)

答案 1 :(得分:0)

你可能想要类似gnu函数的东西

int asprintf(char **strp, const char *fmt, ...);

这是一个函数,它在*strp中返回一个足够大的分配字符串,用于保存您的打印字符串。假设您的WRITEDEBUG宏仅用于将它们用作语句而非内部表达式的位置,则可以执行

#define DEBUG(...)              \
do {                            \
  char* strp = 0;               \
  asprintf(&strp, __VA_ARG__);  \
  WRITE(strp);                  \
  free(strp);                   \
} while(0)

如果您的平台没有asprintf,您可能会想出使用snprintf的实现,并根据需要放大要返回的字符串。