下列宏是什么意思??

delphihero 西山居 图形引擎工程师  2002-03-15 09:20:16
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#if !defined _HOOH_H_
#define _HOOK_H_
#endif
还有怎么用 vc 生成自定义的类?没学过 sdk编程
...全文
12 点赞 收藏 9
写回复
9 条回复
心念不空过 2002年03月15日
大家说得很全了,我来总结一下吧:)

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
这段是说如果在DEBUG状态,则将THIS_FILE定义换成THIS_FILE[]=__FILE__,__FILE__和__LINE__都是C++的标准宏;
实际上,在afx.h中已经定义了THIS_FILE=__FILE__,此处换成[]的目的是要供DEBUG_NEW来使用(MSDN关于THIS_FILE的解释只是说供ASSERT来调用,)在DEBUG状态定义了DEBUG_NEW后,预处理器会在所有你用到new的地方插入DEBUG_NEW,DEBUG_NEW和new的作用相同,只是可以跟踪每一个分配对象的所在源代码文件名和行号,这样,在使用CMemoryState::DumpAllObjectsSince时,DEBUG_NEW参与显示内存分配信息。而在Release版时,DEBUG_NEW被解析成普通的new,同时也不再产生文件名和行号信息了。
不知道说明白了没有。

#if !defined _HOOH_H_
#define _HOOK_H_
#endif
中间一句应该是#define _HOOH_H_吧?
这段就简单了,因为在VC5以后Microsoft Visual C++不需要makefiel文件了,这样在编译链接的时候就有一个重复定义的问题,很显然,如果一个.h的头文件被include了两次,那就麻烦大了,所以,这三句话的作用是保证只include一次该头文件。

#if等是条件编译,这个没有什么要说的了吧?比如说:
#if Version < 3
BITMAP 1 errbox.bmp
#endif

#ifdef Debug
BITMAP 1 errbox.bmp
#endif

回复 点赞
delphihero 2002年03月15日
没人说怎么用 #if、#ifdef、#endif 怎么用呀
回复 点赞
kaitty 2002年03月15日
基于Document/view的工程的*.cpp文件跟你上面的一样。
回复 点赞
delphihero 2002年03月15日
是不是每个 vc 的 cpp 里面都有这些
回复 点赞
hahatoy 2002年03月15日
#define new DEBUG_NEW 用于检测内存泄漏
回复 点赞
hahatoy 2002年03月15日
static char THIS_FILE[]=__FILE__; 可以在ASSERT错误的时候提供行号信息#define new DEBUG_NEW 可以检测内存泄漏
其他的大家都说了
回复 点赞
kaitty 2002年03月15日
insert-->new class选择generic class,类名为xxx;

project->add to project->files
然后选择xxx的头文件XXX.h和实现文件XXX.cpp

在需要用到xxx类的地方
#include "xxx.h"



回复 点赞
kaitty 2002年03月15日
#ifdef _DEBUG
意思是如果是DEBUG则编译这部分。
我就懂这个,见笑。
回复 点赞
dockbar 2002年03月15日
__FILE__就是你的文件名

#if !defined _HOOH_H_
#define _HOOK_H_
#endif
这个保证你的这个文件只包含一次


回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7901

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告