Когда существует много операторов препроцессора и много каскадов #ifdef, трудно получить обзор с тех пор обычно, они не располагаются с отступом. например.
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
Когда я рассматриваю также расположение с отступом тех операторов препроцессора, я боюсь того, чтобы запутываться с общим уровнем отступа. Таким образом, как Вы решаете это красивым способом?
Тот факт, что директивы предварительной обработки "обычно" не имеют отступа, не является хорошей причиной для отказа от них:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
Если у вас часто бывает несколько уровней вложенности директив предварительной обработки, вам следует переделать их так, чтобы сделайте их проще.
Во-первых, убедитесь, что вам действительно нужны все ifdef
утверждения. Возможно, есть способ их рефакторинга, чтобы ограничить количество вложенных проверок if? Если предположить, что они вам нужны:
Хорошей идеей будет выделить первую часть (include) в отдельный включаемый файл:
В your_header.h
:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#endif
Затем в файле реализации вы сможете сделать все более разумно. Либеральные пустые строки и комментарии - это тот подход, которого я обычно придерживаюсь в отношении неиндентированных #ifdef
проверок.
#ifndef __WIN32__
#ifdef SOMEOTHER
stmts
// SOMEOTHER
#endif
maybe stmts
// __WIN32__
#endif
При этом нет правила, что нельзя делать отступы в проверках препроцессора, если это делает код более читабельным.
Как и вы, я еще не придумал, как лучше всего использовать отступ, но я нашел более чем в одном месте этот альтернативный отступ, в котором # всегда помещается в первый столбец и только ключевое слово имеет отступ:
#ifdef __WIN32__
# include <pansen_win32>
#else
# include <..>
#endif
В Visual Studio, когда вы вводите # в качестве первого символа, он всегда сдвигает свой отступ влево, поэтому кажется, что MS либо предпочитает никогда не делать отступы в инструкциях препроцессора, либо использовать вышеуказанный формат.
Большая проблема заключается в том, что у вас есть смешанные операторы препроцессора и не препроцессора и применяется отступ. Трудно сделать код, который выглядел бы хорошо, независимо от того, какой вариант:
вариант (a)
for (...)
{
if (foo)
{
if (bar)
{
#ifdef __WIN32__
c = GetTickCount();
#else
c = clock();
#endif
}
}
}
вариант (b)
for (...)
{
if (foo)
{
if (bar)
{
#ifdef __WIN32__
c = GetTickCount();
#else
c = clock();
#endif
}
}
}
вариант (c)
for (...)
{
if (foo)
{
if (bar)
{
# ifdef __WIN32__
c = GetTickCount();
# else
c = clock();
# endif
}
}
}
На этом этапе это становится вопросом личного вкуса, как и многие другие стили отступов.