自定义类printf变参数的输出函数_常用于调试
自定义类printf变参数的输出函数,常用于调试
在C99下可以使用如下方法:
#ifdef DEBUG #include <stdio.h> #define debug(fmt, x...) \ do \ { \ printf("%s %s(Line %d): "fmt,__FILE__,__FUNCTION__,__LINE__, ##x); \ }while(0) #else #define debug(fmt, x...) #endif
或者
#ifdef DEBUG #include <stdio.h> #define debug(...) \ do \ { \ printf("%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \ printf(__VA_ARGS__); \ }while(0) #else #define debug(x...) #endif
对于不支持变参数符号(…)的平台可以用
#ifdef DEBUG #include <stdio.h> #define debug(x) \ do \ { \ printf("%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \ printf x;\ printf("\n"); \ }while(0) #else #define debug(x) #endif
但在使用时就注意用双括号,如
debug(("This is for debug\n"));
非宏定义而用函数定义的方法:
#define __DEBUG__ #ifdef __DEBUG__ #include <stdarg.h> void debug(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vprintf(fmt, ap); va_end(ap); } #else void debug(const char *fmt, ...) { } #endif
这样定义的函数与printf的用法一致。