Что означает имя _headerfile_h - PullRequest
2 голосов
/ 08 июля 2019

Я читал книгу Зеда Шоу "Изучите трудный путь".В 20-й главе автор создает заголовочный файл, например, headerfile.h и включает в себя строку #ifndef _headerfile_h.Я понимаю директиву #ifndef, но не _headerfile_h.Пожалуйста, объясните это _headerfile_h или укажите любой ресурс, чтобы найти его.

#ifndef _headerfile_h
#define _headerfile_h

…other material…

#endif /* _headerfile_h */

Ответы [ 2 ]

4 голосов
/ 08 июля 2019

Это просто уникальное имя, которое будет использоваться только этим заголовком, чтобы избежать проблем, если заголовок включен дважды.

Обратите внимание, что в общем случае не следует создавать имена функций, переменных, тегов или макросовэто начинается с подчеркивания.Часть C11 §7.1.3 Зарезервированные идентификаторы говорит:

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

См. Также:

и, возможно, некоторые другие тоже.Ряд этих вопросов имеют дополнительные ссылки на другие ресурсы - вопросы SO и внешние ссылки.

3 голосов
/ 08 июля 2019

Директива #ifndef проверяет, определен ли «аргумент» как макрос или нет. Если он не определен (n в ifndef означает «не»), то следующий блок вплоть до соответствующего #endif передается препроцессором.

Если макрос определен, то блок пропускается и не передается компилятору препроцессором.

Итак, #ifndef _headerfile_h проверяет, определен ли символ _headerfile_h как макрос или нет.

Из названия макроса кажется, что это часть заголовка include guard .

...