Spec-Zone.ru › GCC 11 CPP

Далее: Вычисленные включения, Предыдущее: Заголовки, включаемые только один раз, Вверх: Файлы заголовков [Оглавление][Указатель]

2.5 Альтернативы обёртке #ifndef ¶

CPP поддерживает ещё два способа указания, что файл заголовка должен быть прочитан только один раз. Ни один из них не является столь же переносимым, как обёртка ‘#ifndef’, и мы рекомендуем вам не использовать их в новых программах, за исключением того, что ‘#import’ является стандартной практикой в Objective-C.

CPP поддерживает вариант ‘#include’ под названием ‘#import’, который включает файл, но делает это не более одного раза. Если вы используете ‘#import’ вместо ‘#include’, вам не нужны условные операторы внутри файла заголовка, чтобы предотвратить многократное включение содержимого. ‘#import’ является стандартным в Objective-C, но считается устаревшей расширением в C и C++.

‘#import’ — не очень хорошо спроектированная функция. Она требует, чтобы пользователи файла заголовка знали, что он должен быть включён только один раз. Гораздо лучше, если разработчик файла заголовка напишет его так, чтобы пользователи не нуждались в этом знании. Использование обёртки ‘#ifndef’ достигает этой цели.

В текущей реализации однократное использование ‘#import’ предотвратит повторное чтение файла с помощью ‘#import’ или ‘#include’. Вы не должны полагаться на это; не используйте и ‘#import’, и ‘#include’ для ссылки на один и тот же файл заголовка.

Ещё один способ предотвращения многократного включения файла заголовка — директива ‘#pragma once’ (см. Директивы). ‘#pragma once’ не имеет проблем, которые есть у ‘#import’, но она не поддерживается всеми препроцессорами, поэтому вы не можете полагаться на неё в переносимых программах.

Далее: Вычисленные включения, Предыдущее: Заголовки, включаемые только один раз, Вверх: Файлы заголовков [Оглавление][Указатель]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.4.0/cpp/Alternatives-to-Wrapper-_0023ifndef.html

Spec-Zone.ru

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