Spec-Zone.ru › GCC 8 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’, этот файл больше никогда не будет прочитан, независимо от чего.

‘#pragma once’ не имеет проблем, которые есть у ‘#import’, но он не распознаётся всеми препроцессорами, поэтому вы не можете полагаться на него в переносимой программе.

Далее: Вычисленные включения, Предыдущее: Заголовочные файлы, используемые только один раз, Наверх: Заголовочные файлы [Содержание][Индекс]

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

Spec-Zone.ru

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