Я всегда помещал свой #include
после #ifdef
/#define
Включают-Guard. Теперь механизм рефакторинга моей IDE (Qt Creator) поместил его перед Include-Guard, например
#include "AnotherHeader.h"
#ifndef MYHEADER_H
#define MYHEADER_H
Может ли это вызвать какие-либо проблемы или я могу оставить это так?
Если в заголовке есть защита, вы не столкнетесь с проблемами. Помещение его внутрь включенных защит может по-прежнему ускорять компиляцию. То, что не видит компилятор, занимает меньше времени для компиляции, даже если это не приводит к ошибкам.
Хотя это и не так часто, я считаю, что это считается приемлемым, однако будьте осторожны: если у вас есть циркуляр #include
Таким образом, ваши включения обычно будут включать друг друга навсегда (до тех пор, пока предварительный анализатор не пожалуется на достижение максимальной глубины включения). Это не произойдет с #include
После охранников.
(Circular #include
в любом случае это не считается хорошим стилем, но если он все же используется, он может работать с #include
«s после включить охранников, но, конечно, не будет с #include
«s до их.)
Просто проверьте, что будет. Давайте предположим, что два разных заголовка использует MyHeader.h
,
AnotherHeader.h
включен безоговорочноВ следующий раз:
AnotherHeader.h
снова включен безоговорочноЕсли AnotherHeader.h
Включено, ничего плохого не должно произойти. Но в целом я бы поставил include-guard вверху вашего файла — нет смысла загружать AnotherHeader.h
снова, когда он уже был загружен один раз.