Spec-Zone.ru › GCC 14

3.23.2 Модуль Предварительной обработки

Модули влияют на предварительную обработку из-за единиц заголовков и перевода включений. Некоторые использования предварительной обработки как отдельного шага либо не производят правильный вывод, либо требуют наличия CMIs.

Единицы заголовков импортируют макросы. Эти макросы могут влиять на последующее условное включение, что, следовательно, может привести к различным наборам импортов. При предварительной обработке необходимо загрузить CMI. Если единица заголовка недоступна, предварительный процессор выдает предупреждение и продолжает работу (при просто предварительной обработке генерируется ошибка). Обнаружение таких импортов требует токенизации входного потока предварительным процессором до фазы 4 (расширения макросов).

Перевод включений преобразует #include, #include_next и #import директивы во внутренние import объявления. Перевод конкретной директивы контролируется модульным маппером. Имена единиц заголовков канонизируются во время предварительной обработки.

Информация о зависимостях может быть выведена для импорта макросов, расширяя функциональность опций -MD и -MMD. Обнаружение объявлений импорта также требует предварительной обработки на фазе 4, а значит, требует полной предварительной обработки (или компиляции).

Опции -M, -MM и -E -fdirectives-only останавливают предварительную обработку до фазы 4.

Опция -save-temps использует -fdirectives-only для предварительной обработки и сохраняет определения макросов в выходных данных предварительной обработки. Обычно эту опцию также желательно использовать при явном выполнении предварительной обработки единицы заголовка или при использовании таких предварительно обработанных выходных данных:

g++ -fmodules-ts -E -fdirectives-only my-header.hh -o my-header.ii
g++ -x c++-header -fmodules-ts -fpreprocessed -fdirectives-only my-header.ii

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gcc/C_002b_002b-Module-Preprocessing.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API