#ifdef _DEBUG的问题

helianbobo 2005-11-02 01:25:09
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
大家能帮我解释一下吗?
急盼!!!
...全文
254 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
aceouter 2005-11-02
  • 打赏
  • 举报
回复
#ifdef _DEBUG // 判断是否定义_DEBUG
#undef THIS_FILE // 取消THIS_FILE的定义
static char THIS_FILE[]=__FILE__; // 定义THIS_FILE指向文件名
#define new DEBUG_NEW // 定义调试new宏,取代new关键字
#endif // 结束
cchh 2005-11-02
  • 打赏
  • 举报
回复
很简单,如果你是win32_debug状态,你的编译环境中系统自动加了一个_DEBUG环境参数,
你的头文件就是判断编译器加没加这个参数而已
helianbobo 2005-11-02
  • 打赏
  • 举报
回复
查了查msdn,static char THIS_FILE[]=__FILE__; 为什么要这样呢?
Snow_Ice11111 2005-11-02
  • 打赏
  • 举报
回复
^_^哇,就这个问题上,显然楼主懂得比我多多了,搬个板凳来听课。不知楼主还有何不明白之处?
helianbobo 2005-11-02
  • 打赏
  • 举报
回复
定义了 _DEBUG后,由于定义了_DEBUG,编译器确定这是一个调试,编译 #ifdef _DEBUG和#endif之间的代码。#undef 表示清除当前定义的宏,使得THIS_FILE无定义。__FILE__ 是编译器能识别的事先定义的ANSI C 的6个宏之一。#define new DEBUG_NEW
DEBUG_NEW定位内存泄露并且跟踪文件名.
这是我所知道的。谢谢上面两位,但还是有很多地方不明白,期待回复ing...
Snow_Ice11111 2005-11-02
  • 打赏
  • 举报
回复
刚好手头上有本书上提到了这个,摘录如下:

THIS_FILE是一个char数组全局变量,字符串值为当前文件的全路径,这样在Debug版本中当程序出错时出错处理代码可用这个变量告诉你是哪个文件中的代码有问题。
helianbobo 2005-11-02
  • 打赏
  • 举报
回复
多谢,现结贴。
菜牛 2005-11-02
  • 打赏
  • 举报
回复
如果定义了 _DEBUG,表示在调试状态下编译,因此相应修改了两个符号的定义。
bobob 2005-11-02
  • 打赏
  • 举报
回复
#ifdef _DEBUG //如果是debug状态
#undef THIS_FILE //清除THIS_FILE
static char THIS_FILE[]=__FILE__; //定义THIS_FILE为
//__FILE__(这是当前文件全路径名字)
#define new DEBUG_NEW //定义new为DEBUG_NEW(这个可以检测到内存泄露之类的问题,其实就是可以使用crt开头的那几个调试函数)
#endif
xqk 2005-11-02
  • 打赏
  • 举报
回复
learning

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧