Правила целостности для параметров компилятора /Yc и /Yu
Обновлен: Ноябрь 2007
При использовании предкомпилированного заголовка, созданного с помощью параметра /Yc или /Yu, компилятор сравнивает текущую среду компиляции со средой, в которой был создан PCH-файл. Для текущей компиляции необходимо указывать среду, совместимую с предыдущей (использующую совместимые параметры компиляции, прагма-директивы и т.п.). Если компилятор обнаруживает несовместимость, он выдает предупреждение, а также по возможности выявляет эту несовместимость. Такие предупреждения не обязательно указывают на проблемы в PCH-файле; как правило, они просто предупреждают о возможных конфликтах. В следующих разделах рассматриваются правила целостности для предкомпилированных заголовков.
Правила целостности для параметров компилятора
В следующей таблице приведены параметры компилятора, которые могут вызвать предупреждение о нарушении целостности при использовании предкомпилированного заголовка.
Параметр |
Имя |
Правило |
---|---|---|
/D |
Определяет константы и макросы |
Должен быть одним и тем же в компиляции, при которой был создан предкомпилированный заголовок, и в текущей компиляции. Состояние определенных констант не проверяется, но если файлы зависят от значений измененных констант, то результаты могут быть непредсказуемы. |
/E или /EP |
Копирует выходные данные препроцессора в стандартный вывод |
Предкомпилированные заголовки не работают с параметрами /E и /EP. |
/Fr или /FR |
Создает данные для обозревателя исходного кода Майкрософт |
Параметры /Fr и /FR можно использовать с параметром /Yu только в том случае, если они использовались во время создания предкомпилированного заголовка. Последующие компиляции, в которых используется предкомпилированный заголовок, также создают данные для обозревателя исходного кода. Данные обозревателя помещаются в единый SBR-файл, после чего другие файлы могут ссылаться на них точно так же, как на данные CodeView. Расположение данных обозревателя исходного кода переопределять нельзя. |
/GA, /GD, /GE, /Gw или /GW |
Параметры протокола Windows |
Должны быть одними и теми же в компиляции, при которой был создан предкомпилированный заголовок, и в текущей компиляции. Если эти параметры различаются, будет выдано предупреждение. |
/Zi |
Создает полную отладочную информацию |
Если этот параметр действовал во время создания предкомпилированного заголовка, то при последующих компиляциях, в которых используется этот заголовок, также можно использовать эту отладочную информацию. Если параметр /Zi не действовал во время создания предкомпилированного заголовка, то при последующих компиляциях, в которых используется этот заголовок и параметр /Zi, будет выведено предупреждение. Отладочная информация помещается в текущий объектный файл, и локальные символы, определенные в предкомпилированном заголовке, будут недоступны для отладчика. |
Примечание. |
---|
Функция предкомпиляции заголовков предназначена для использования только с исходными файлами на языках C и C++. |
Правила целостности для пути включаемых файлов
Предкомпилированный заголовок, созданный с использованием параметра /Yc, не содержит сведений о пути включаемых файлов, использовавшемся во время создания PCH-файла. При использовании PCH-файла компилятор всегда использует путь включаемых файлов, заданный в текущей компиляции.
Правила целостности для исходных файлов
При использовании предкомпилированного заголовка компилятор пропускает все директивы препроцессора (включая прагма-директивы), заданные до прагма-директивы hdrstop. Компиляция, описываемая подобными директивами препроцессора, должна совпадать с компиляцией, использованной для создания файла предкомпилированного заголовка.
Правила целостности для прагма-директив
Прагма-директивы, обработанные при компиляции предкомпилированного заголовка, обычно воздействуют на файл, в котором этот заголовок затем используется. Приведенные далее прагма-директивы воздействуют только на код в PCH-файле, и не влияют на код, в котором впоследствии будет использован этот PCH-файл:
Comment |
page |
subtitle |
Linesize |
pagesize |
Title |
Message |
skip |
|
Приведенные далее прагма-директивы остаются в составе предкомпилированного заголовка и воздействуют на оставшуюся часть компиляции, в которой используется этот заголовок:
alloc_text |
function |
optimize |
auto_inline |
inline_depth |
Pack |
check_pointer |
inline_recursion |
same_seg |
check_stack |
intrinsic |
warning |
code_seg |
loop_opt |
|
data_seg |
native_caller |
|
См. также
Ссылки
Правила согласованности предкомпилированных заголовков
/Yc (создать предварительно скомпилированный заголовочный файл)