检测预编译的头文件

时间:2009-08-25 08:59:06

标签: c++ visual-studio-2005

预处理器是否有办法检测当前的代码 翻译单位使用(或正在创建)预编译的标题?

--- --- 我现在面临的实际问题是,我正在进行一个项目 通过预编译几乎所有头文件来滥用PCH。
这意味着没有 您可以从#includes获得清晰的依赖关系管理,编译时间非常糟糕。 实际上,每次更改都会触发完全重建 该应用程序是一个很大的方法来一次性修复它,一些老家伙拒绝 相信预编译的每一个都是坏的。我必须先证明这一点 所以我必须一步一步地做,并确保我的更改不会影响 编译旧PCH方式的代码 我的计划是,如果我有空余时间,请在PCH.h中运行并使用非PCH版本。

#ifdef USES_PCH
#include "PCH.h"
#elif
// include only whats needed
#endif

我想避免在命令行定义USES_PCH并手动保留它 与/ Y同步,除了不是很优雅之外,还会很痛苦。有很多配置 和模块,以及许多不遵循项目默认值的文件。

3 个答案:

答案 0 :(得分:3)

如果Visual C ++定义了一个常量来指示预编译头是否正在使用,它可能会列在Predefined Macros中。它没有在那里记录,所以它可能不存在。 (如果确实存在,则可能未记录,并且可能在将来的版本中更改。)

答案 1 :(得分:3)

这不起作用,在Visual C ++中使用预编译头时,在包含预编译头之前甚至不能有任何代码。当我遇到你的问题时,我正在尝试做类似的事情。经过一些试验和错误后,我发现在使用/ Yu编译器选项时,预编译头的#include指令之前不能有代码。

#ifdef USES_PCH 
#include "stdafx.h"
#endif

结果:致命错误C1020:意外#endif

答案 2 :(得分:1)

据我所知,它不能,但有一些启发式:VC ++使用StdAfx.h,Borland使用#pragma hdrstop等。