NGWS SDK Documentation  

This is preliminary documentation and subject to change.
To comment on this topic, please send us email at ngwssdk@microsoft.com. Thanks!

Consistency Rules for Per-File Use of Precompiled Headers

When you use a PCH, the compiler assumes the same compilation environment—using consistent compiler options, pragmas, and so on—that was in effect when you created the PCH, unless you specify otherwise. If the compiler detects an inconsistency, it issues a warning and identifies the inconsistency where possible. Such warnings do not necessarily indicate a problem with the PCH; they simply warn you of possible conflicts. The consistency requirements for PCHs are explained in the following list:

Compiler Option Consistency
The following compiler options can trigger an inconsistency warning when using a PCH:
  • Macros created using the Preprocessor (/D) option must be the same between the compilation that created the PCH and the current compilation. The state of defined constants is not checked, but unpredictable results can occur if these change.
  • PCHs do not work with the /E and /EP options.
  • PCHs must be created using either the Generate Browse Info (/FR) option or the Exclude Local Variables (/Fr) option before subsequent compilations that use the PCH can use these options.
C 7.0-Compatible (/Z7)
If this option is in effect when the PCH is created, subsequent compilations that use the PCH can use the debugging information.

If the C 7.0-Compatible (/Z7) option is not in effect when the PCH is created, subsequent compilations that use the PCH and that option trigger a warning. The debugging information is placed in the current .obj file, and local symbols defined in the PCH are not available to the debugger.

Include Path Consistency
A PCH does not contain information about the include path that was in effect when it was created. When you use a .pch file, the compiler always uses the include path specified in the current compilation.
Source File Consistency
When you specify the Use Precompiled Header File (/Yu) option, the compiler ignores all preprocessor directives (including pragmas) that appear in the source code that will be precompiled. The compilation specified by such preprocessor directives must be the same as the compilation used for the Create Precompiled Header File (/Yc) option.
Pragma Consistency
Pragmas processed during the creation of a PCH usually affect the file with which the PCH is subsequently used. The comment and message pragmas do not affect the remainder of the compilation.

The following pragmas are retained as part of a PCH. They do affect the remainder of a compilation that uses the PCH.

alloc_text include_alias pack
auto_inline init_seg pointers_to_members
check_stack inline_depth setlocale
code_seg inline_recursion vtordisp
data_seg intrinsic warning
function optimize  

See Also

/Yu (Use Precompiled Header File) | Compiler Options | Setting Compiler Options