hdrstop pragma

提供对预编译文件名和编译状态的保存位置的更多控制。

语法

#pragma hdrstop [ ( "filename" ) ]

备注

filename 是要使用或创建(取决于是否指定了 /Yu/Yc)的预编译头文件的名称。 如果 filename 不包含路径规范,则假定预编译的头文件与源文件位于同一目录中

如果在使用 /Yc 编译 C 或 C++ 文件时,文件包含 hdrstoppragma,则编译器会保存编译状态,上限取决于 pragma 的位置。 pragma 之后的任何代码的编译状态都不会保存。

使用 filename 命名保存编译状态的预编译头文件hdrstop 和 filename 之间的空格是可选的。 hdrstoppragma 中指定的文件名是一个字符串,受任何 C 或 C++ 字符串的约束。 特别是,你必须将其包含在引号中并使用转义字符(反斜杠,\)来指定目录名称。 例如:

#pragma hdrstop( "c:\\projects\\include\\myinc.pch" )

预编译标头文件的名称是根据以下规则按优先顺序决定的。

  1. /Fp 编译器选项的参数

  2. #pragma hdrstop 的 filename 参数

  3. 扩展名为 PCH 的源文件的基名称

如果 /Yc/Yu 选项或 hdrstoppragma 均未指定文件名,则源文件的基本名称将用作预编译头文件的基名称。

还可以使用预处理命令来执行宏替换,如下所示:

#define INCLUDE_PATH "c:\\progra~1\\devstsu~1\\vc\\include\\"
#define PCH_FNAME "PROG.PCH"
.
.
.
#pragma hdrstop( INCLUDE_PATH PCH_FNAME )

以下规则规定了 hdrstoppragma 的放置位置:

  • 它必须出现在任何数据或函数声明/定义的外部。

  • 必须在源文件而不是头文件中指定它。

示例

#include <windows.h>                 // Include several files
#include "myhdr.h"

__inline Disp( char *szToDisplay )   // Define an inline function
{
    // ...                           // Some code to display string
}
#pragma hdrstop

在此示例中,hdrstoppragma 会在已包含两个文件并已定义内联函数之后出现。 最初,这可能是 pragma 的临时位置。 但是,请考虑将手动预编译选项 /Yc/Yuhdrstoppragma 一起使用,你可以预编译整个源文件,甚至是内联代码。 Microsoft 编译器不会只允许你预编译数据声明。

另请参阅

Pragma 指令以及 __pragma_Pragma 关键字