24. Используйте только внутреннюю, но не внешнюю защиту директивы #include
24. Используйте только внутреннюю, но не внешнюю защиту директивы #include
Резюме
Предотвращайте непреднамеренное множественное включение ваших заголовочных файлов директивой #include, используя в них защиту с уникальными именами.
Обсуждение
Каждый заголовочный файл должен использовать внутреннюю защиту директивы #include, чтобы предотвратить переопределения в случае множественного включения данного файла. Например, заголовочный файл fоо.h должен иметь такой общий вид:
#ifndef FOO_H_INCLUDED_
#define FOO_H_INCLUDED_
// ... Содержимое файла …
#endif
Обратите внимание на следующие правила при определении защиты включения.
• Используйте для защиты уникальные имена. Убедитесь, что вы используете имена, уникальные, по крайней мере, в пределах вашего приложения. Выше мы использовали одно распространенное соглашение для используемых в защите имен; имена для защиты могут включать имя приложения, а некоторые инструменты генерируют имена для защиты, содержащие случайные числа.
• Не пытайтесь хитрить. Не размещайте никакого кода или комментариев до и после защищенной части, и следуйте показанной выше стандартной форме защиты. Современные препроцессоры могут обнаружить защиту, но могут оказаться малоинтеллектуальными и ожидать кода защиты строго в начале и в конце заголовочных файлов.
Избегайте использования устаревшей внешней защиты директивы #include, рекомендуемой в некоторых старых книгах:
#ifndef FOO_H_INCLUDED_ // не рекомендуется
#include "foo.h"
#define FOO_H_INCLUDED_
#endif
Внешняя защита утомительна, устарела для современных компиляторов и ненадежна из-за необходимости согласования имен для защиты.
Исключения
В очень редких случаях заголовочный файл может быть предназначен для многократного включения.
Ссылки
[C++03, §2.1] • [Stroustrup00] §9.3.3
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Каталог Include
Каталог Include В каталоге Include описаны многочисленные файлы. Одни из них используются почти во всех примерах, другие нужны только для одной или двух программ. Перечень наиболее важных файлов приводится ниже.1. EvryThng.h, как говорит само его название, включает почти все
Элемент <xsl:include>
Элемент <xsl:include> Другой способ вставить таблицы стилей внутрь других документов — использовать элемент <xsl:include>, позволяющий включить содержимое файла в определенное место в таблице стилей. У этого элемента только один атрибут:• href (обязательный). URI таблицы
include - Импорт текста из внешнего файла ActionScript
include - Импорт текста из внешнего файла ActionScript includeВключает содержимое файла, во время того, как клип тестируется, публикуется или экспортируется.Синтаксис:#include pathАргументы:Директива #include загружает в текущий сценарий текст сценария из внешнего текстового файла
Приложение 5 ОЦЕНКА ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ЗАТРАТ НА ЗАЩИТУ ИНФОРМАЦИИ
Приложение 5 ОЦЕНКА ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ ЗАТРАТ НА ЗАЩИТУ ИНФОРМАЦИИ 1. Оценка затрат на защиту информацииСегодня в отечественных компаниях и на предприятиях с повышенными требованиями в области информационной безопасности (банковские системы, биллинговые
9.3.2. FTP-директивы
9.3.2. FTP-директивы Для работы по FTP-протоколу тоже есть несколько директив:? ftp_passive параметр — режим работы. Если в качестве параметра указано значение on, то разрешен пассивный режим (устанавливается по умолчанию).Сервер squid позволяет работать с FTP-протоколом, но может
59. Не используйте using для пространств имен в заголовочных файлах или перед директивой #include
59. Не используйте using для пространств имен в заголовочных файлах или перед директивой #include РезюмеДиректива using для пространств имен создана для вашего удобства, а не для головной боли других. Никогда не используйте объявления или директивы using перед директивой #include.Вывод:
Правило 3: Везде, где только можно используйте const
Правило 3: Везде, где только можно используйте const Замечательное свойство модификатора const состоит в том, что он накладывает определенное семантическое ограничение: данный объект не должен модифицироваться, – и компилятор будет проводить это ограничение в жизнь. const
2.3. Снижение числа #include с помощью предварительного объявления классов
2.3. Снижение числа #include с помощью предварительного объявления классов ПроблемаИмеется заголовочный файл, который ссылается на классы из других заголовочных файлов, и требуется снизить зависимости компиляции (и, возможно, время).РешениеЧтобы избежать ненужных
ДИРЕКТИВЫ ПРЕПРОЦЕССОРА #define, #include, #undef, #if, #ifdef, #ifndef, #else, #endif
ДИРЕКТИВЫ ПРЕПРОЦЕССОРА #define, #include, #undef, #if, #ifdef, #ifndef, #else, #endif Язык Си был разработан в помощь работающим программистам, а им нравится его препроцессор. Этот полезный помощник просматривает программу до компилятора (отсюда и термин "препроцессор") и заменяет
ВКЛЮЧЕНИЕ ФАЙЛА: #include
ВКЛЮЧЕНИЕ ФАЙЛА: #include Когда препроцессор "распознает" директиву #include, он ищет следующее за ней имя файла и включает его в текущий файл. Директива выдается в двух видах: #include <stdio.h> имя файла в угловых скобках#include "mystuff.h" имя файла в двойных
8.6.3. Using-директивы
8.6.3. Using-директивы Пространства имен появились в стандартном С++. Предыдущие версии С++ их не поддерживали, и, следовательно, поставляемые библиотеки не помещали глобальные объявления в пространства имен. Множество программ на С++ было написано еще до того, как
Слово в защиту реализаций
Слово в защиту реализаций В чем же причина недоверия к наследованию реализаций? Я пришел к выводу, что ответ лежит в области психологии. Тридцатилетний программистский опыт оставил нам лишь сомнения насчет самой идеи реализаций. И даже слово "реализация" приобрело в
Tesla усиливает защиту своих автомобилей титановым щитом Николай Маслухин
Tesla усиливает защиту своих автомобилей титановым щитом Николай Маслухин Опубликовано 04 апреля 2014 В «Промзоне» уже писали об электромобилях Tesla Model S, зарекомендовавших себя как наиболее безопасные: система безопасности Model S настолько хороша,
Внутренняя кибербезопасность: сколько и кому платит американский Department of Homeland Security за свою защиту? Михаил Ваннах
Внутренняя кибербезопасность: сколько и кому платит американский Department of Homeland Security за свою защиту? Михаил Ваннах Опубликовано 15 сентября 2013 Бог виноделия Дионис, что родился в пламени перунов Зевса, испепеливших его мать Семелу, был очень
Вы хотите использовать внешнюю видеокарту
Вы хотите использовать внешнюю видеокарту Встроенные видеокарты обычно не самые производительные (ведь основная цель этой платы – удешевление стоимости компьютера, но никак не качественная работа с трехмерной графикой), поэтому многие пользователи со временем