Используйте #ifndef _HEADER_H_ #define _HEADER_H_ в заголовках

0

Должен ли я использовать

#ifndef _HEADER_H_
#define _HEADER_H_

и т.д. в каждом файле заголовка?

  • 1
    Нет, вы должны использовать тот же идентификатор. Оставляя опечатку в стороне, да, вы должны охранять каждый заголовок. Вы можете рассмотреть #pragma once в качестве альтернативы.
  • 1
    Имена, начинающиеся со _HEADER_H подчеркивания, за которым следует заглавная буква ( _HEADER_H ), и имена, содержащие два последовательных _HEADER_H подчеркивания, зарезервированы для реализации. Не используйте их.
Теги:
header

1 ответ

3
Лучший ответ

Да, это хорошая практика для защиты каждого заголовка. Существует два наиболее распространенных способа сделать это:

#ifndef UNIQUE_IDENTIFIER // the identifier musn't start with "_"!
#define UNIQUE_IDENTIFIER
// your code here
#endif

Второй технически не требуется для поддержки компилятором, но он используется большинством современных компиляторов. Вы не можете сделать ошибку (например, опечатку, дубликат идентификатора) с помощью этого подхода:

#pragma once
// your code here
  • 1
    Я также видел комментарии о том, что однажды #pragma немного более эффективна, поскольку может предотвратить двойную загрузку одного и того же файла, в то время как традиционный подход все еще требует загрузки файла и обработки предохранителя включения.
  • 0
    @Eric Да, я тоже об этом слышал. Afaik, это только когда-либо оказывается значительным с огромными заголовками. Поскольку я ограничиваю себя как можно меньшими заголовками (и думаю, что все должны), я никогда не смог измерить значительно лучшую производительность.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню