Почему #ifndef и #define используются в файлах заголовков C ++?
Я обычно видел такой код в начале файлов заголовков:
#ifndef HEADERFILE_H #define HEADERFILE_H
И в конце файла
#endif
Какова цель этого?
- C ++: Может ли макрос расширять «abc» на «a», «b», «c»?
- Сначала препроцессор C комментирует или расширяет macros?
- «#Include» текстовый файл в программе на языке C как символ
- Определения макросов C # в препроцессоре
- Тип переменных #define
- Являются ли typedef и #define одинаковыми в c?
- Можно ли перебирать аргументы в переменных массивах?
- Как сделать строку char из значения макроса C?
- C #define макрос для отладочной печати
- Выход препроцессора
- Stringification - как это работает?
- Как проверить ОС с помощью директивы препроцессора?
- В чем разница между именами WIN32 и _WIN32 в C ++
Они называются #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__ определен, поэтому он не будет включаться снова.