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

Spec-Zone.ru

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