Правила целостности для пофайлового использования предкомпилированных заголовков
Параметр компилятора /Yu позволяет указывать используемый файл предкомпилированного заголовка (PCH).
При использовании предкомпилированных заголовков предполагается, что компилятор работает в той же среде компиляции (одинаковые параметры компилятора, директивы pragma и т. д.), которая использовалась при создании предкомпилированного заголовка, если не указано иное. Если компилятор обнаруживает несовместимость, он выдает предупреждение, а также по возможности идентифицирует эту несовместимость. Такие предупреждения не обязательно свидетельствуют о наличии проблемы, связанной с предкомпилированным заголовком; они могут просто указывать на возможное наличие конфликтов. Правила целостности для предкомпилированных заголовков описываются в следующих подразделах.
Правила целостности для параметров компилятора
Следующие параметры компилятора могут вызвать предупреждения о нарушении целостности при использовании предкомпилированного заголовка.
Макросы, созданные с использованием параметра препроцессора (/D), должны быть одинаковы для компиляции, при которой был создан предкомпилированный заголовок, и текущей компиляции. Состояние определенных констант не проверяется, однако их изменение может привести к непредвиденным результатам.
Предкомпилированные заголовки не поддерживаются с параметрами /E и /EP.
При создании предкомпилированных заголовков должен использоваться либо параметр "Создавать сведения для обозревателя" (/FR), либо параметр "Исключить локальные переменные" (/Fr), чтобы при последующих компиляциях с использованием предкомпилированного заголовка эти параметры могли использоваться.
Совместимость с C 7.0 (/Z7)
Если данный параметр включен при создании предкомпилированного заголовка, при последующих компиляциях с использованием предкомпилированного заголовка может использоваться отладочная информация.
Если параметр "Совместимость с C 7.0" (/Z7) выключен при создании предкомпилированного заголовка, при последующих компиляциях с использованием предкомпилированного заголовка и параметра /Z7 появится предупреждение. Отладочная информация помещается в текущий OBJ-файл, и локальные символы, определенные в предкомпилированном заголовке, недоступны отладчику.
Согласованность путей включения
Предкомпилированный заголовок не содержит сведений о пути включения, действительном в момент создания заголовка. При использовании PCH-файла компилятор всегда руководствуется путем включения, заданным в текущей компиляции.
Согласованность исходных файлов
При указании параметра "Использовать файл предкомпилированного заголовка" (/Yu) компилятор игнорирует все директивы препроцессора, включая директивы pragma, имеющиеся в исходном коде, подлежащем предварительной компиляции. Компиляция, выполняемая при указании таких директив препроцессора, не должна отличаться от компиляции с использованием параметра "Создавать файл предкомпилированного заголовка" (/Yc).
Согласованность прагм
Прагмы, обрабатываемые при создании предкомпилированного заголовка, обычно оказывают влияние на файл, с которым в дальнейшем используется предкомпилированный заголовок. Прагмы комментариев и сообщений в остальном не оказывают влияния на компиляцию.
Следующие прагмы сохраняются в составе предкомпилированного заголовка и влияют на остальную часть компиляции, для которой используется предкомпилированный заголовок.
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 |
|
См. также
Ссылки
Правила согласованности предкомпилированных заголовков