有没有一种方法可以自动在每一个源文件复制使用#define(Is there a way to au

2019-07-03 15:03发布

我想下面的出现在我的Visual C ++ 2005的解决方案每个源文件:

  #define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
  #define new DEBUG_NEW

是否有这样做没有手动复制它的一种方式? 编译器选项?

Answer 1:

命令行选项/D可以被用于定义预处理器符号。 我不知道,不过,是否也可以用来以参数定义宏,但它应该是一件容易的事情来测试。

编辑:如果做不到这一点,在/FI选项 (“力包括”)应该让你做你想做的。 引述MSDN文档 :

该选项的指定用双引号在文件中的#include指令在每个源文件的第一行相同的效果[...]。

然后,你可以把你#define在那只强制包含文件。



Answer 2:

我建议不要使用此#define 。 重新定义new不便携,如果你再这样做可以防止任何随后使用放置new的工作。 如果“力”这个#define前一个文件的手动#include 。就拿效果,那么你的库头文件和它们的源文件之间的不兼容性的风险,你会得到在使用位置的库文件“惊喜”的错误new (经常模板/容器类)。

如果你要重新定义new ,然后使它明确的,它留在源。



Answer 3:

您还可以插入#define到stdafx.h中或COMMON.H或者被纳入每一个源文件中的任何其他头文件。



Answer 4:

编译器选项?

是的,你可以自定义列表define项目属性S(无论是在“预处理”或“高级”,据我记得)。 这些define旨意存在于每一个源文件。



Answer 5:

你可以把#define s转换为h文件,但没有把#ifndef后卫在h文件。 然后#include文件中的每个源文件。

我并不赞同重新定义new ,顺便说一句。



Answer 6:

你可以定义自己的全局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


文章来源: Is there a way to automatically have a #define reproduced in each source file