0

我在我的代码中多次使用了一种类型的调试语句——比如说DEBUG("abcd");或者DEBUG("abc %d def", val)被翻译并打印到文件中。

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

WRITE(char *string);

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

4

2 回答 2

0

也许你在看:#define DEBUG(str,...) WRITE(str,__VA_ARGS__)

于 2013-12-01T09:36:03.640 回答
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需要使用和放大要返回的字符串。

于 2013-12-01T09:51:56.670 回答