2.1. Обеспечение единственности подключения заголовочного файла
2.1. Обеспечение единственности подключения заголовочного файла
Проблема
У вас есть заголовочный файл, который подключается несколькими другими файлами. Вы хотите убедиться, что препроцессор сканирует объявления в заголовочном файле не более одного раза.
Решение
В заголовочном файле с помощью #define определите макрос и содержимое заголовочного файла подключайте только тогда, когда макрос еще не был определен. Используйте такую комбинацию директив препроцессора #ifndef, #define и #endif, как я делаю в примере 2.1:
#ifndef MYCLASS_H__ // защита #include
#define MYCLASS_H__
// Здесь поместите все. что требуется...
#endif // MYCLASS_H__
Когда препроцессор сканирует такой заголовочный файл, одной из первых встреченных им вещей будет директива #ifndef и следующий за ней символ, #ifndef говорит препроцессору перейти на следующую строку только в том случае, если символ MYCLASS_H__ еще не определен. Если он уже определен, препроцессор должен пропустить код до закрывающей директивы #endif. Строка, следующая за #ifndef, определяет MYCLASS_H__, так что если этот файл при одной и той же компиляции сканируется препроцессором дважды, то второй раз MYCLASS_H__ будет уже определен. Поместив весь код между #ifndef и #endif, вы гарантируете, что в процессе компиляции он будет прочитан только один раз.
Обсуждение
Если вы не используете эту методику, которая называется защитой заголовка, то вы, вероятно, уже видели ошибки компиляции «symbol already defined» (символ уже определен), которые являются следствием отсутствия защитных мер против множественных определений. C++ не позволяет определять один и тот же символ несколько раз, и если вы это сделаете (целенаправленно или случайно), то получите ошибку компилятора. Включение защиты предотвращает такие ошибки, и она стала стандартной методикой.
Определяемый с помощью #define макрос не обязан следовать какому-либо формату, но использованный мной синтаксис имеет широкое распространение. Его идея состоит в том, чтобы использовать символ, который не будет конфликтовать с другим макросом, в результате чего файл будет непреднамеренно пропускаться препроцессором. На практике вы можете столкнуться и с другими методиками, такими как включение в макрос версии заголовочного файла или модуля, т.е. MYCLASS_H_V301__, или, возможно, имени автора. Не имеет значения, как вы его назвали, до тех пор, пока вы придерживаетесь единой схемы. Эти макросы должны использоваться только в заголовочном файле, который они защищают, и больше нигде.
В некоторых фрагментах кода можно увидеть внешнюю защиту заголовков, которая аналогична описанной ранее внутренней защите заголовков, за исключением того, что она используется в файле, включающем заголовочный файл, а не в самом заголовочном файле.
#ifndef MYCLASS_H__
#include "myclass.h"
#endif
Это сокращает процесс включения, поскольку, если макрос MYCLASS_H__ уже определен, файл myclass.h даже не подключается. Несколько лет назад утверждалось, что внешняя защита заголовков в больших проектах снижает время компиляции, но компиляторы совершенствуются и внешняя защита больше не требуется. Не используйте ее.
Даже если вы работаете над небольшим проектом, всегда следует помещать в заголовочный файл защиту заголовка. Если заголовочный файл включается в более чем одном файле, имеется вероятность, что в один прекрасный момент вы увидите ошибку переопределения. Более того, небольшие проекты стремятся за очень короткое время превратиться в большие, и хотя проект мог начинаться с единственного исполняемого файла и набора заголовочных файлов, включаемых только один раз, рано или поздно проект вырастет, и начнут появляться ошибки компиляции. Если вы с самого начала добавите защиту заголовков, вам не придется в будущем возвращаться и добавлять их сразу в большое количество файлов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
Оптимизаторы подключения
Оптимизаторы подключения Как правило, при соединении с провайдером стандартная программа удаленного доступа не использует все резервы операционной системы и каналов связи. В Windows заложена возможность увеличить скорость соединения компьютера с Сетью на 25–30 %.
7.9. Безопасность подключения
7.9. Безопасность подключения В разд. 14.5 мы будем рассматривать различные технологии прослушивания сетевого трафика. В основном они эффективны в локальных сетях, но хакеры больше любят интернет-соединения, потому что здесь можно найти больше интересного и есть лазейка,
Оптимизаторы подключения
Оптимизаторы подключения Обычно при соединении с провайдером стандартная программа удаленного доступа не использует все резервы операционной системы и каналов связи. В Windows заложена возможность увеличить скорость соединения компьютера с Сетью на 25–30 %. Разработчики
2.2. Обеспечение единственности экземпляра переменной при большом количестве исходных файлов
2.2. Обеспечение единственности экземпляра переменной при большом количестве исходных файлов ПроблемаТребуется, чтобы одна и та же переменная использовалась различными модулями программы, а копия переменной должна быть только одна. Другими словами, это должна быть
8.5. Гарантия единственности копии переменной-члена
8.5. Гарантия единственности копии переменной-члена ПроблемаИмеется переменная-член, у которой должен быть только один экземпляр независимо от числа создаваемых экземпляров класса. Этот тип переменных-членов обычно называется статическими членами или переменными
18.1.3. Тип подключения к компьютеру
18.1.3. Тип подключения к компьютеру Принтеры могут подключаться к компьютеру как через LPT-порт, так и через порт USB. USB-принтеры намного удобнее (их можно подключать к компьютеру и отключать от него, не выключая компьютера). Кроме того, на некоторых современных компьютерах
Способы подключения к Интернету
Способы подключения к Интернету Кто такой провайдерДля подключения к Интернету необходимо найти провайдера, то есть посредника между вами и Интернетом.Существуют специальные фирмы, занимающиеся подключением к Интернету новых клиентов и впоследствии их технической
Способы подключения к Интернету
Способы подключения к Интернету Если у вас есть компьютер, это еще не означает, что у вас есть доступ к ресурсам Интернета.Самый простой, недорогой и надежный способ — кабельное подключение. Для этого необходимо, чтобы ваш дом находился в зоне охвата провайдера,
Что нужно для подключения?
Что нужно для подключения? Для подключения по технологии ADSL нужен ADSL-модем. Модем — устройство, связывающее компьютер с линией передачи данных.К телефонной линии модем подключают через сплиттер, иначе он будет создавать помехи телефону. Сплиттер, патчкорд и телефонные
Что нужно для подключения?
Что нужно для подключения? Разумеется, сам телефон! О том, что он способен работать как модем и подключаться к компьютеру кабелем USB, обязательно сказано в документации.В ней же вы найдете и необходимые инструкции по настройке вашей модели телефона и соединению его с
15.2.2. Настройка подключения
15.2.2. Настройка подключения Для настройки ADSL-соединения нужно выполнить следующие действия:откройте папку Сетевые подключения (Пуск, Настройка, Сетевые подключения);выберите команду Создание нового подключения;в первом окне мастера настройки соединения просто нажмите
Принцип единственности цели
Принцип единственности цели Чем так замечателен вызов компонента? В конце концов, каждый программист знает, как написать процедуру translate, которая перемещает точку на заданное расстояние. Традиционная форма вызова, доступная с незначительными вариациями во всех языках
5.2. Варианты подключения
5.2. Варианты подключения Итак, мы разобрались, что такое Интернет, теперь нужно к нему подключиться. Подключением пользователей ко Всемирной компьютерной сети занимаются специальные компании — провайдеры. За определенную плату (увы, и в виртуальном мире коммунизм еще не
Подключения
Подключения Данная вкладка отображает используемые подключения к Интернету (рис. 7.43). Если вы не подключены к Сети, можно настроить само подключение, воспользовавшись кнопкой Установить. Рис. 7.43. Содержимое вкладки ПодключенияОбнаруженные подключения добавляются в
Настройка подключения
Настройка подключения С каждым беспроводным адаптером поставляется программное обеспечение, позволяющее настраивать беспроводное подключение. Можно обойтись встроенными средствами Windows, однако они менее удобны в использовании.У системного администратора нужно