c++宏定义的一个问题

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
这段代码放在文件的开头有什么作用呢

意思是如果是调试状态的话就定义new为DEBUG_NEW,这个DEBUG_NEW也是个宏,然后定义一个只有一个元素的全局数组,初始化成这个c/cpp文件的标识符
用处是,说个例子
经常我会在我每个c文件内都写个main函数用于调试
比如我要在我的项目里使用f函数,新写一个c文件
//#define debug
int f ()
{
return (int) 'f' ;
}
#ifdef debug
int main ()
{
int f () ;

printf ("%d" ,f ()) ;

return 0 ;
}
#endif
它可以正常的在我的工程中使用,但是一旦把debug定义了(去掉//注释符)这个文件就可以单独编译成一个程序,这样我可以检查f函数是否正常工作,或者更新f函数时进行调试
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-08
如果定义了_DEBUG(从名字上来看是指调试模式)

1、将new操作符定义为DEBUG_NEW宏

2、改变文件中THIS_FILE的定义。

这看起来像是VS中的宏定义,其作用为建立一种内存泄露检测机制,将每一次用new 分配的内存都记录下来,程序结束时如果存在内存泄露便可以看到是哪个文件哪一行泄露了内存。
第2个回答  2013-07-08
#开头的语句是编译的时候用的,也就是说,当编译的时候,会判断_DEBUG这个变量是否已经定义,如果定义了,则定义DEBUG_NEW,并且解除THIS_FILE的定义,重新定义THIS_FILE,如果_DEBUG没有被定义,则这段代码不会被编译,等于在编译时把这段删掉了
第3个回答  2020-03-08
这是用于条件编译的宏定义一般在头文件上加入这种宏定义为了防止重复包含头文件。
相似回答