Почему #ifndef и #define используются в заголовочных файлах C ++? - PullRequest
416 голосов
/ 31 октября 2009

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

#ifndef HEADERFILE_H
#define HEADERFILE_H

А в конце файла стоит

#endif

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

Ответы [ 3 ]

457 голосов
/ 31 октября 2009

Они называются # включают охрану .

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

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

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

29 голосов
/ 24 августа 2013
#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
7 голосов
/ 13 февраля 2018

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

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

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

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

...