Почему #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__ определен, поэтому он не будет включаться снова.