Я видел код, как это обычно в начале заголовочных файлов:
#ifndef HEADERFILE_H
#define HEADERFILE_H
И в конце файла
#endif
Какова цель этого?
c++
c
c-preprocessor
Асад Хан
источник
источник
#pragma
такое: оно активирует специфическую для компилятора функцию. Хотя#pragma once
это очень широко поддерживаются, это нестандартное.info cpp
или посмотрите здесь ) гласит: «она не распознается всеми препроцессорами, поэтому вы не можете положиться на нее в переносимой программе». А GNU cpp оптимизирует обычные и переносимые#ifndef
идиомы, поэтому он так же эффективен, как и#pragma once
.#ifndef HEADERFILE_H
может нарушить пространство имен реализации заголовка, имя которого начинается сE
; идентификаторы, начинающиеся сE
цифры и заглавной буквы, зарезервированы для<errno.h>
. Я предлагаю#ifndef H_HEADERFILE
.Ответы:
Это называется #include guard .
Как только заголовок включен, он проверяет, определено ли уникальное значение (в данном случае
HEADERFILE_H
). Затем, если он не определен, он определяет его и переходит к остальной части страницы.Когда код включается снова, первый
ifndef
сбой, в результате чего пустой файл.Это предотвращает двойное объявление любых идентификаторов, таких как типы, перечисления и статические переменные.
источник
#pragma once
который делает то же самое :-)#pragma once
не переносимый; общая#ifndef
идиома рекомендуется.#ifndef
проверяет, был ли данный токен#defined
ранее в файле или во включенном файле; если нет, он включает код между ним и закрывающим#else
или, если нет#else
,#endif
оператором.#ifndef
часто используется для придания идемпотентности заголовочных файлов путем определения токена после включения файла и проверки того, что токен не был установлен вверху этого файла.источник
#ifndef H_HEADER_NAME
.Это предотвращает многократное включение одного и того же заголовочного файла несколько раз.
Предположим, вы включили этот заголовочный файл в несколько файлов. Таким образом, первый раз __COMMON_H__ не определен, он будет определен и будет включен заголовочный файл.
В следующий раз __COMMON_H__ определен, поэтому он не будет включаться снова.
источник
Они называются ifdef или включают охранников.
При написании небольшой программы может показаться, что она не нужна, но по мере роста проекта вы можете намеренно или неумышленно включать один файл много раз, что может привести к предупреждению компиляции, как уже объявленная переменная.
Если он не объявлен, что означает, что #ifndef генерирует true, тогда только часть между #ifndef и #endif выполняется иначе. Это предотвратит повторное объявление идентификаторов, перечислений, структуры и т. Д.
источник