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