我查看了一个示例代码,在我的服务器上创建了一个日志系统......我找到了这个
#if DEBUG
printf("something here");
#endif
Run Code Online (Sandbox Code Playgroud)
我知道它的作用.只有在DEBUG被定罪的情况下它才能发挥作用.但DEBUG定义在哪里?我看了所有的头文件,但我找不到DEBUG ..
另外,您能否为我提供一个关于设计日志系统的好例子或教程?
提前致谢..
ova*_*nes 11
不要使用DEBUGC++标准未定义的宏.C++标准定义NDEBUG(无DEBUG),用于标准assert宏,您的日志代码将与它一起使用.DEBUG是编译器依赖的.因此NDEBUG,通过标准确保正确设置.将它应用于您的示例使用:
#ifndef NDEBUG
printf("something here");
#endif
Run Code Online (Sandbox Code Playgroud)
但我的意见是:你不应该在NDEBUG/ DEBUGpair 周围设计一个日志库.记录lib应始终存在,只是为了允许您跟踪应用程序的行为而无需重新编译代码,这反过来又涉及代码的新部署以及推迟容易出错的行为的可能性.Petru Marginean关于日志库设计的以下DDJ文章描述了如何在C++中以非常有效的方式确保这一事实:
第1部分:http://drdobbs.com/cpp/201804215
第2部分:http://drdobbs.com/cpp/221900468
关于日志库,请查看Boost Logging库:
http://boost-log.sourceforge.net/libs/log/doc/html/index.html
我被低估了,因为如果没有在命令行中明确定义NDEBUG,就说不会设置NDEBUG.我同意这个事实,但另一方面,我在这里理解这个问题,在调试模式下编译,也应该产生日志输出.将行为捆绑到NDEBUG状态时,这个事实会更好地执行.
编译器,至少是我所知道的,可以选择从编译文件的"外部"定义预处理器宏.
例如,要DEBUG使用微软编译器进行定义,您可以使用类似的东西
cl -DDEBUG file.cpp ...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13603 次 |
| 最近记录: |