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-12.1.0/cpp/Alternatives-to-Wrapper-_0023ifndef.html