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

Spec-Zone.ru

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