摘要:本文介绍了如何用宏来定义注释,以控制是否需要注释掉cout。
1. 起心动念
在调试程序的时候,经常需要用cout
输出一些内容,以判断程序是否运行正常,以及进行到哪一步了。但是在程序发布的时候,又不需要这些cout
的内容,这时候就需要手动把cout
内容删除或者注释掉。很繁琐,尤其是你注释完了之后发现还需要调试,就又得解注释。
下面提供一种用一条宏定义语句实现注释或解注释所有cout语句的方法。
2. 宏定义控制cout
首先,用宏定义cout
,并将程序中所有cout改成MY_COUT
:
#define MY_COUT cout
其次,如果想注释掉所有cout
,则重新定义MY_COUT
为:
#define MY_STUFF
#define MY_COUT /MY_STUFF/
解释:
- 直接把
MY_COUT
定义成#define MY_COUT //
是不行的,因为“注释比宏定义先被处理”。也就是说,如果你这么定义,那么//
被解释成注释,MY_COUT
的值是空的。 MY_STUFF
的目的就是为了防止/MY_STUFF/
被解释成注释符号- 把
MY_STUFF
定义成空的,保证了MY_COUT
会被替换成我们想要的//
3. 完整实现
另一个问题是,如果你cout
的东西太多,前面的东西就会被冲掉。比如说你晚上跑一个大程序,第二天可能会发现想看到的输出信息已经没有了。解决办法就是写日志文件。
综合上面说的,用于控制输出信息的宏定义如下:
- 控制台输出
#define MY_COUT cout
- 文件输出
#define MY_COUT myFileStream
ofstream myFileStream;//全局变量,在使用之前需要打开文件,如myFileStream.open("log.txt").
- 不输出
#define MY_STUFF
#define MY_COUT /MY_STUFF/
4. 总结
本文介绍了如何用一条宏定义语句控制提示信息往控制台输出、文件输出,还是不输出。