Защитный заголовок (или более условно "включить защиту") предназначен для предотвращения проблем, если заголовочный файл включен более одного раза; например,
#ifndef MARKER
#define MARKER
// declarations
#endif
В первый раз, когда этот файл #include
-едан, символ препроцессора MARKER
будет неопределенным, поэтому препроцессор определит символ, и следующие декларации будут включены в исходный код, видимый компилятором. В последующих #include
будет определен символ MARKER
, и, следовательно, все в #ifnde
/ #endif
будет удалено препроцессором.
Чтобы это работало правильно, символ MARKER
должен отличаться для каждого заголовочного файла, который может быть #include
-ед.
Причина, по которой это необходимо, заключается в том, что в C / C ++ запрещено определять тип или функцию с одним и тем же именем более одного раза в модуле компиляции. Guard позволяет файлу заголовка #include
другим файлам заголовка, не беспокоясь о том, что это может привести к тому, что некоторые объявления будут включены несколько раз.
Короче говоря, это не не мешает вам #include
-ить файл снова и снова. Скорее всего, позволяет сделать это , не вызывая ошибок компиляции .