#Include перед # ifdef / # define Include-Guard хорошо?

Я всегда помещал свой #include после #ifdef/#define Включают-Guard. Теперь механизм рефакторинга моей IDE (Qt Creator) поместил его перед Include-Guard, например

#include "AnotherHeader.h"
#ifndef MYHEADER_H
#define MYHEADER_H

Может ли это вызвать какие-либо проблемы или я могу оставить это так?

7

Решение

Если в заголовке есть защита, вы не столкнетесь с проблемами. Помещение его внутрь включенных защит может по-прежнему ускорять компиляцию. То, что не видит компилятор, занимает меньше времени для компиляции, даже если это не приводит к ошибкам.

6

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

Хотя это и не так часто, я считаю, что это считается приемлемым, однако будьте осторожны: если у вас есть циркуляр #includeТаким образом, ваши включения обычно будут включать друг друга навсегда (до тех пор, пока предварительный анализатор не пожалуется на достижение максимальной глубины включения). Это не произойдет с #includeПосле охранников.

(Circular #includeв любом случае это не считается хорошим стилем, но если он все же используется, он может работать с #include«s после включить охранников, но, конечно, не будет с #include«s до их.)

1

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

  1. AnotherHeader.h включен безоговорочно
  2. Включить охрану позволяет загрузить остальную часть вашего заголовочного файла.

В следующий раз:

  1. AnotherHeader.h снова включен безоговорочно
  2. Включить защиту предотвращает загрузку остальной части вашего заголовочного файла.

Если AnotherHeader.h Включено, ничего плохого не должно произойти. Но в целом я бы поставил include-guard вверху вашего файла — нет смысла загружать AnotherHeader.h снова, когда он уже был загружен один раз.

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