Spec-Zone.ru › GCC 12

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-12.2.0/gcc/C_002b_002b-Module-Preprocessing.html

Spec-Zone.ru

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