Как прокомментировать конструкцию препроцессора #if, #else, #endif? - PullRequest
3 голосов
/ 01 марта 2011

Представьте себе блок препроцессора C:

#if defined( NAME )
...
#else  // comment-else
...
#endif  // comment-endif

Такие блоки могут быть довольно большими и запутанными.

Чтобы прояснить намерения и поведение, как бы вы написали comment-else и comment-endif как выражение NAME?

Примечание: я должен добавить, что меня особенно интересуют более сложные случаи с комбинированными выражениями и вложенностью.

Ответы [ 5 ]

12 голосов
/ 01 марта 2011
#if defined(NAME)
#else // defined(NAME)
#endif // defined(NAME)

Это, если используется по всему источнику, совершенно однозначно.

6 голосов
/ 01 марта 2011

эм ..

#if defined( NAME )
...
#else  // NAME
...
#endif  // NAME

не может быть более очевидным, чем это ...

2 голосов
/ 01 марта 2011

Если вы реорганизуете «большой и сложный» код для разделения функций, вы можете легко увидеть весь раздел сразу.

#if defined NAME
    do_something_for_name();
#else
    do_something_without_name();
#endif

Неужели никаких специальных комментариев-условностей не так ли?

2 голосов
/ 01 марта 2011
#if defined(NAME)
    ...
#else
    // !defined(NAME)
    ...
#endif // defined(NAME)

Потому что я не хочу, чтобы #else // condition даже отдаленно выглядело как #elif condition.Я знаю, что синтаксическая раскраска решает эту проблему (по крайней мере, делает это, если она более умна в отношении синтаксиса препроцессора C, чем синтаксическая раскраска SO), и, конечно, я использую раскраску синтаксиса.Тем не менее.

1 голос
/ 01 марта 2011
#if defined( NAME )
...
#else  /* Else part of NAME */
...
#endif  /* End of NAME */

Вот как я это делаю.

При чтении / просмотре кода (при условии, что вы используете редактор VIM в Linux) используйте % (Shift + 5) для перехода с#if до #else и #endif легко.

...