我想下面的出现在我的Visual C ++ 2005的解决方案每个源文件:
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
是否有这样做没有手动复制它的一种方式? 编译器选项?
我想下面的出现在我的Visual C ++ 2005的解决方案每个源文件:
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new DEBUG_NEW
是否有这样做没有手动复制它的一种方式? 编译器选项?
命令行选项/D
可以被用于定义预处理器符号。 我不知道,不过,是否也可以用来以参数定义宏,但它应该是一件容易的事情来测试。
编辑:如果做不到这一点,在/FI
选项 (“力包括”)应该让你做你想做的。 引述MSDN文档 :
该选项的指定用双引号在文件中的#include指令在每个源文件的第一行相同的效果[...]。
然后,你可以把你#define
在那只强制包含文件。
我建议不要使用此#define
。 重新定义new
不便携,如果你再这样做可以防止任何随后使用放置new
的工作。 如果“力”这个#define
前一个文件的手动#include
。就拿效果,那么你的库头文件和它们的源文件之间的不兼容性的风险,你会得到在使用位置的库文件“惊喜”的错误new
(经常模板/容器类)。
如果你要重新定义new
,然后使它明确的,它留在源。
您还可以插入#define
到stdafx.h中或COMMON.H或者被纳入每一个源文件中的任何其他头文件。
编译器选项?
是的,你可以自定义列表define
项目属性S(无论是在“预处理”或“高级”,据我记得)。 这些define
旨意存在于每一个源文件。
你可以把#define
s转换为h
文件,但没有把#ifndef
后卫在h
文件。 然后#include
文件中的每个源文件。
我并不赞同重新定义new
,顺便说一句。
你可以定义自己的全局new运算符某处在你的代码,并有条件地进行编译。 不要忘了,包括新的所有4个变化(平原和数组一个有和没有不抛出)和两个删除(平原和阵列之一)的变化。 有一个在我的C ++有效,第三版的副本对此事一整章(第8章)
#ifdef MYDEBUG
void* operator new(std::size_t size) { <your code here> }
void operator delete(void* p) { <your code here> }
#endif