Spec-Zone.ru › GCC 9 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-9.5.0/cpp/Alternatives-to-Wrapper-_0023ifndef.html

Spec-Zone.ru

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