Подтвердить что ты не робот

Когда не использовать включить охрану в файл заголовка?

Мы все знаем, когда использовать include guard, но когда мы не будем использовать его в нашем проекте?

Недавно я увидел проект с компиляцией микширования (CUDA + GCC), один заголовочный файл (файл CUDA) намеренно оставлен без включения защиты. Мне просто интересно.

4b9b3361

Ответ 1

С головы: есть 2 сценария:

  • когда вы хотите включить/отключить возможности отладки (как работает assert.h)
  • для 'x-macro' тип функциональности, в котором у вас есть файл include, выполняет две части проблемы, такие как определение перечисления, определяющее массив строковых имен, соответствующих перечислениям

Ответ 2

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

Ответ 3

В наших проектах мы никогда не используем include guard. Мы используем include antiguard:

#ifndef _stdafx_h_
#define _stdafx_h_
#else
#error reinclude stdafx.h
#endif

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

Ответ 4

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

Не используйте include guard, когда файл должен включаться несколько раз в один блок компиляции, и это не приводит к дублированию объявлений.