hdrstop
pragma
提供对预编译文件名和编译状态的保存位置的更多控制。
语法
#pragma hdrstop
[ ( "filename" ) ]
备注
filename 是要使用或创建(取决于是否指定了 /Yu
或 /Yc
)的预编译头文件的名称。 如果 filename 不包含路径规范,则假定预编译的头文件与源文件位于同一目录中。
如果在使用 /Yc
编译 C 或 C++ 文件时,文件包含 hdrstop
pragma,则编译器会保存编译状态,上限取决于 pragma 的位置。 pragma 之后的任何代码的编译状态都不会保存。
使用 filename 命名保存编译状态的预编译头文件。 hdrstop
和 filename 之间的空格是可选的。 hdrstop
pragma 中指定的文件名是一个字符串,受任何 C 或 C++ 字符串的约束。 特别是,你必须将其包含在引号中并使用转义字符(反斜杠,\
)来指定目录名称。 例如:
#pragma hdrstop( "c:\\projects\\include\\myinc.pch" )
预编译标头文件的名称是根据以下规则按优先顺序决定的。
/Fp
编译器选项的参数#pragma hdrstop
的 filename 参数扩展名为 PCH 的源文件的基名称
如果 /Yc
和 /Yu
选项或 hdrstop
pragma 均未指定文件名,则源文件的基本名称将用作预编译头文件的基名称。
还可以使用预处理命令来执行宏替换,如下所示:
#define INCLUDE_PATH "c:\\progra~1\\devstsu~1\\vc\\include\\"
#define PCH_FNAME "PROG.PCH"
.
.
.
#pragma hdrstop( INCLUDE_PATH PCH_FNAME )
以下规则规定了 hdrstop
pragma 的放置位置:
它必须出现在任何数据或函数声明/定义的外部。
必须在源文件而不是头文件中指定它。
示例
#include <windows.h> // Include several files
#include "myhdr.h"
__inline Disp( char *szToDisplay ) // Define an inline function
{
// ... // Some code to display string
}
#pragma hdrstop
在此示例中,hdrstop
pragma 会在已包含两个文件并已定义内联函数之后出现。 最初,这可能是 pragma 的临时位置。 但是,请考虑将手动预编译选项 /Yc
和 /Yu
与 hdrstop
pragma 一起使用,你可以预编译整个源文件,甚至是内联代码。 Microsoft 编译器不会只允许你预编译数据声明。