Spec-Zone.ru › GCC 10 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). ‘#pragma once’ не имеет проблем, которые есть у ‘#import’, но он не распознаётся всеми препроцессорами, поэтому на него нельзя полагаться в переносимой программе.

Далее: Вычисленные включения, Предыдущее: Заголовки, включаемые только один раз, Вверх: Файлы заголовков [Оглавление][Индекс]

© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-10.5.0/cpp/Alternatives-to-Wrapper-_0023ifndef.html

Spec-Zone.ru

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