请问:头文件中的#ifdef/#undef是什么意思

Latest_99 2011-09-24 06:54:56
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

偶是初学,请问C/C++江湖大佬,以上字段如何解?
...全文
308 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Latest_99 2011-09-26
  • 打赏
  • 举报
回复
虽然看得不大明白,但还是先结贴算分先,请接分。

[Quote=引用 2 楼 jerryjbiao 的回复:]
这个一般用于程序调式用的,具体如下:


C/C++ code

#ifdef _DEBUG // 判断是否定义_DEBUG
#undef THIS_FILE ……
[/Quote]
小坏猪猪 2011-09-24
  • 打赏
  • 举报
回复
这个一般用于程序调式用的,具体如下:


#ifdef _DEBUG // 判断是否定义_DEBUG
#undef THIS_FILE // 取消THIS_FILE的定义
static char THIS_FILE[]=__FILE__; // 定义THIS_FILE指向文件名
#define new DEBUG_NEW // 定义调试new宏,取代new关键字
#endif // 结束

如果定义了_DEBUG,表示在调试状态下编译,因此相应修改了两个符号的定义
THIS_FILE是一个char数组全局变量,字符串值为当前文件的全路径,这样在Debug版本中当程序出错时出错处理代码可用这个变量告诉你是哪个文件中的代码有问题。
定义 _DEBUG后,由于定义了_DEBUG,编译器确定这是一个调试,编译#ifdef _DEBUG和#endif之间的代码。#undef 表示清除当前定义的宏,使得THIS_FILE无定义。

__FILE__ 是编译器能识别的事先定义的ANSI C 的6个宏之一。
DEBUG_NEW定位内存泄露并且跟踪文件名.
ppxia0001 2011-09-24
  • 打赏
  • 举报
回复
如果定义过宏_DEBUG
定义宏new为DEBUG_NEW
解除THIS_FILE这个宏
声明一个字符串等于本文件名

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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