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

Spec-Zone.ru

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