先上宏,这里用HLOG替代printf函数。如果给第二行打上注释,那么HLOG函数为空。这样可以在程序调试完成后一键去除所有的printf。
#include "stdio.h"
#define __HLOG__
#ifdef __HLOG__
#define HLOG(format,...) printf("FILE: " __FILE__ ", LINE: %d: " format "\n", __LINE__, ##__VA_ARGS__)
#else
#define HLOG(format,...)
#endif
写程序时我们经常需要在很多地方打上printf,写完以后需要把printf一条一条删除,回头修改的时候还要在一条一条加上非常麻烦,于是此宏诞生。
我们可以一个宏开关
#define __HLOG__
需要printf时,打开宏开关,用HLOG替代printf函数。不需要是,关闭宏开关即可。
#define HLOG(format,...) printf("FILE: " __FILE__ ", LINE: %d: " format "\n", __LINE__, ##__VA_ARGS__)
__FILE__, __LINE__为ANSI C标准预定义宏。ANSI C包含的标准预定义宏有:
__LINE__:当前源代码行号;
__FILE__:当前源文件名;
__DATE__:当前的编译日期
__TIME__:当前编译时间;
__STDC__:当要求程序严格遵循ANSI C标准时该标识被赋值为1;
__cplusplus:当编写C++程序时该标识符被定义。
这样,用HLOG后所有的printf信息会按照如下格式输出
FILE: xxx, LINE: xxx, …….
上测试代码
main.cpp
#include "stdio.h"
#define __HLOG__
#ifdef __HLOG__
#define HLOG(format,...) printf("FILE: " __FILE__ ", LINE: %d: " format "\n", __LINE__, ##__VA_ARGS__)
#else
#define HLOG(format,...)
#endif
int main()
{
char str[] = "hello hlog!";
HLOG("%s",str);
return 0;
}
执行结果:
FILE: c:\users\刘皓\documents\visual studio 2017\projects\consoleapplication1\consoleapplication1\consoleapplication1.cpp, LINE: 13: hello hlog!
完!