如何评论#if,#else,#endif预处理器构造?

时间:2011-03-01 11:15:09

标签: c++ c coding-style comments

想象一下C预处理器块:

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

这些块可能非常庞大且令人困惑。

为了澄清意图和行为,您如何编写 comment-else comment-endif 作为NAME的表达?

注意:我应该补充一点,我对组合表达式和嵌套的更复杂的情况特别感兴趣。

5 个答案:

答案 0 :(得分:12)

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

如果在整个来源中使用,则完全明确。

答案 1 :(得分:6)

ERM ..

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

不能比那更明显......

答案 2 :(得分:2)

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

因为我不希望#else // condition看起来像#elif condition一样远。我知道,语法着色解决了这个问题(至少它可以解决C预处理器语法比SO的语法着色更聪明),当然我也使用语法着色。仍然。

答案 3 :(得分:2)

如果您将“大而复杂”的代码重构为单独的函数,您可以轻松地立即查看整个部分。

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

真的不需要任何特殊的评论约定,是吗?

答案 4 :(得分:1)

#if defined( NAME )
...
#else  /* Else part of NAME */
...
#endif  /* End of NAME */

我就是这样做的。

在阅读/浏览代码时(假设您在Linux中使用VIM编辑器),我们 (Shift + 5)#if跳转到#else和{ {1}}很容易。