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

Spec-Zone.ru

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