很多时候,在写代码的时候会使用到printf函数打印调试信息,比较大一些的项目调试写的printf会很多,一旦需要生成 Release发布版本,需要把所有的调试信息注释,即把用printf的代码行注释或者删除,这个过程会很繁琐其容易漏删除printf。
#if 1
#define MY_DEBUG(...) printf(__VA_ARGS__)
#else
#define MY_DEBUG(...)
#endif
__FILE__ 代码所在文件名
__LINE__ 代码所在行号
__FUNCTION__ 代码所在函数名
__DATE__ 代码编译的日期
__TIME__ 代码编译的时间
__TIMESTAMP__ 代码编译的具体时间
printf("sudaroot\r\n");
printf("File name: %s\r\n", __FILE__ );
printf("Code line: %d\r\n", __LINE__ );
printf("Function name: %s\r\n", __FUNCTION__);
printf("Build date: %s\r\n", __DATE__);
printf("Build time: %s\r\n", __TIME__);
printf("Build specific time: %s\r\n", __TIMESTAMP__);
编译日期和时间可以做软件版本号,这样你每次编译的时候就无需担心软件版本号有没有手动修正;
如果你想打印的时候打印出代码的所在文件和代码行号及函数名可以使用下面的,或者自定义修改。
#if 1
#define MY_DEBUG(fmt, ...) printf("%s, %d, %s "fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
#else
#define MY_DEBUG(...)
#endif
##__VA_ARGS__说明:
1、__VA_ARGS__ 是C99新增的一个可变参数的宏,和(...)一样的效果。
2、##是字符串连接符,比如字符串A = {hello } 和 B = {sudaroot\r\n} ,那么A##B = {hello sudaroot\r\n};
3、##__VA_ARGS__组合起来就是防止__VA_ARGS__为空是导致编译器报错。具体详情百度,或者我有空会写一下。
全篇完。
本人博客仅仅代表我个人见解方便记录成长笔记。
若有与 看官老爷见解有冲突,我坚信看官老爷见解是对的,我的是错的。
感谢~!