Почему #ifndef и #define используются в файлах заголовков C ++?

Я обычно видел такой код в начале файлов заголовков:

#ifndef HEADERFILE_H #define HEADERFILE_H 

И в конце файла

 #endif 

Какова цель этого?

Они называются #include охранниками .

Когда заголовок включен, он проверяет, определено ли уникальное значение (в данном случае HEADERFILE_H ). Тогда, если он не определен, он определяет его и продолжается до остальной части страницы.

Когда код включен снова, первый ifndef выходит из строя, в результате получается пустой файл.

Это предотвращает двойное объявление любых идентификаторов, таких как типы, enums и статические переменные.

 #ifndef  /* code */ #else /* code to include if the token is defined */ #endif 

#ifndef проверяет, был ли данный токен #defined ранее в файле или во включенном файле; если нет, он включает в себя код между ним и закрывающим #else или, если нет #else , инструкция #endif . #ifndef часто используется для создания файлов заголовков idempotent, определяя токен после включения файла и проверки того, что токен не был установлен в верхней части этого файла.

 #ifndef _INCL_GUARD #define _INCL_GUARD #endif 

Это предотвращает многократное включение одного и того же заголовочного файла в несколько раз.

 #ifndef __COMMON_H__ #define __COMMON_H__ //header file content #endif 

Предположим, вы включили этот заголовочный файл в несколько файлов. Поэтому в первый раз __COMMON_H__ не определен, он будет определен и включен заголовочный файл.

В следующий раз __COMMON_H__ определен, поэтому он не будет включаться снова.

  • Есть ли способ сделать #define внутри другого #define?
  • Макросъемка Variadic
  • Как объединить два раза с препроцессором C и развернуть макрос, как в «arg ## _ ## MACRO»?
  • Пространства имен в C
  • Псевдо-дженерики в C
  • Есть ли способ переносить сообщение из препроцессора C?
  • Макрос возвращал количество аргументов, даваемых в C?
  • Расширение макроскопического расширения MSVC ++
  • Перегрузка макроса по количеству аргументов
  • Как сравнить строки в условных препроцессорах C
  • Как я могу генерировать уникальные значения в препроцессоре C?
  • Давайте будем гением компьютера.