Как Вы располагаете операторы препроцессора с отступом?

Когда существует много операторов препроцессора и много каскадов #ifdef, трудно получить обзор с тех пор обычно, они не располагаются с отступом. например.

#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif

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

22
задан Rob Kennedy 4 June 2010 в 15:07
поделиться

3 ответа

Тот факт, что директивы предварительной обработки "обычно" не имеют отступа, не является хорошей причиной для отказа от них:

#ifdef __WIN32__
    #include <pansen_win32>
#else
    #include <..>
    #ifdef SOMEOTHER
        stmts
    #endif
    maybe stmts
#endif

Если у вас часто бывает несколько уровней вложенности директив предварительной обработки, вам следует переделать их так, чтобы сделайте их проще.

19
ответ дан 29 November 2019 в 04:54
поделиться

Во-первых, убедитесь, что вам действительно нужны все 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

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

0
ответ дан 29 November 2019 в 04:54
поделиться

Как и вы, я еще не придумал, как лучше всего использовать отступ, но я нашел более чем в одном месте этот альтернативный отступ, в котором # всегда помещается в первый столбец и только ключевое слово имеет отступ:

#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
    }
  }
}

На этом этапе это становится вопросом личного вкуса, как и многие другие стили отступов.

20
ответ дан 29 November 2019 в 04:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: