Стоит ли использовать #ifndef guard в заголовках предварительного объявления?

У меня есть простой заголовочный файл, в котором я объявляю все классы в пространстве имен, например.

#ifndef TEST_FWD_HPP
#define TEST_FWD_HPP

namespace a {
namespace b {

class A;
class B;

}
}

#endif

Если этот файл защищен от нескольких включений (#ifndef …)? Имеет ли это смысл только для предварительных деклараций?

3

Решение

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

Если у вас есть только предварительные определения и прототипы функций, то в этом обычно нет необходимости, но, поскольку заголовочные файлы имеют тенденцию со временем усугублять ситуацию, это часто стоит делать само собой разумеется.

5

Другие решения

Множественная защита включает не только несколько ошибок объявления. Вам нужно вставить эти элементы в каждый заголовочный файл, чтобы избежать бесконечного цикла включения.

2

Просто используйте (формально нестандартно) #pragma once и покончим с этим.

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

2
По вопросам рекламы [email protected]