Sun Studio 12:C 用户指南

B.2.124.5 活前缀

为了在多个源文件间共享预编译头文件,这些源文件就必须将通用的 include 文件集合作为其标记的初始序列共享。标记是指关键字、名称或标点符号。被 #if 指令排除的注释和代码不能被编译器识别为标记。该初始标记序列称为活前缀。也就是说,活前缀是源文件中通用于所有源文件的最靠前的部分。创建预编译头文件并进而确定源文件中哪些头文件是预编译的时,编译器使用此活前缀作为整个操作的依据。

编译器在当前编译期间找到的活前缀必须与用于创建预编译头文件的活前缀匹配。也就是说,必须在使用相同预编译头文件的所有源文件中对活前缀给出一致的解释。

源文件的活前缀只能包含注释和以下任意预处理程序指令:

#include
#if/ifdef/ifndef/else/elif/endif
#define/undef
#ident (if identical, passed through as is)
#pragma (if identical)

以上任何指令都可以引用宏。#else#elif#endif 指令必须在活前缀内匹配。注释被忽略。

指定 -xpch=auto-xpch=autofirst 时,编译器自动确定活前缀的终点,定义如下:对于 -xpch=collect-xpch=use,活前缀以 #pragma hdrstop 结尾。

在共享预编译头文件的每个文件的活前缀中,每个相应的 #define#undef 指令都必须引用相同的符号(例如每个 #define 必须引用同一个值)。这些指令在每个活前缀中出现的顺序也必须相同。每个相应 pragma 也必须相同,并且必须按相同顺序出现在共享预编译头文件的所有文件中。