Почему #ifndef и #define используются в файлах заголовков С++?
Я видел такой код, как обычно, в начале файлов заголовков:
#ifndef HEADERFILE_H
#define HEADERFILE_H
И в конце файла
#endif
Какова цель этого?
Ответы
Ответ 1
Те, что называются #, включают защитников.
Как только заголовок включен, он проверяет, определено ли уникальное значение (в данном случае HEADERFILE_H
). Тогда, если он не определен, он определяет его и продолжается до остальной части страницы.
Когда код снова включен, первый ifndef
завершается с ошибкой, в результате получается пустой файл.
Это предотвращает двойное объявление любых идентификаторов, таких как типы, перечисления и статические переменные.
Ответ 2
#ifndef <token>
/* code */
#else
/* code to include if the token is defined */
#endif
#ifndef
проверяет, был ли данный токен #defined
ранее в файле или во включенном файле; если нет, он включает в себя код между ним и закрывающим #else
или, если нет #else
, #endif
. #ifndef
часто используется для создания именованных файлов заголовков, определяя токен после включения файла и проверки того, что токен не был установлен в верхней части этого файла.
#ifndef _INCL_GUARD
#define _INCL_GUARD
#endif
Ответ 3
Это предотвращает многократное включение одного и того же заголовочного файла в несколько раз.
#ifndef __COMMON_H__
#define __COMMON_H__
//header file content
#endif
Предположим, вы включили этот заголовочный файл в несколько файлов. Поэтому в первый раз __COMMON_H__ не определен, он будет определен и включен заголовочный файл.
В следующий раз __COMMON_H__ определен, поэтому он не будет включаться снова.