我在我的代码中多次使用了一种类型的调试语句——比如说DEBUG("abcd");
或者DEBUG("abc %d def", val)
被翻译并打印到文件中。
现在,但是我想将它们全部转换为不同类型的日志记录,这需要使用带有声明的函数,例如 -
WRITE(char *string);
用法:WRITE(L"abcd")
等等。因为这个调试语句的使用量很大,我希望用宏来转换它。可以这样做吗?还考虑到DEBUG
用于接受格式说明符的函数呢?
我在我的代码中多次使用了一种类型的调试语句——比如说DEBUG("abcd");
或者DEBUG("abc %d def", val)
被翻译并打印到文件中。
现在,但是我想将它们全部转换为不同类型的日志记录,这需要使用带有声明的函数,例如 -
WRITE(char *string);
用法:WRITE(L"abcd")
等等。因为这个调试语句的使用量很大,我希望用宏来转换它。可以这样做吗?还考虑到DEBUG
用于接受格式说明符的函数呢?
也许你在看:#define DEBUG(str,...) WRITE(str,__VA_ARGS__)
你可能想要类似 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
需要使用和放大要返回的字符串。