当有许多预处理器语句和许多#ifdef级联时,很难得到概述,因为通常它们不会缩进。 e.g。
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
当我考虑缩进这些预处理器语句时,我担心会与一般缩进级别混淆。那么你如何以一种美丽的方式解决这个问题呢?
答案 0 :(得分:20)
正如你所说,我还没有考虑缩进的最佳方法,但是我在不止一个地方找到了这个替代缩进,其中#总是放在第一列,只是关键字是缩进的:
#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
}
}
}
在这一点上,它变成了个人品味的问题,就像许多其他缩进风格一样。
答案 1 :(得分:18)
仅仅因为预处理指令“通常”没有缩进不是一个不缩进它们的好理由:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
如果您经常对预处理指令进行多级嵌套,则应重新编写它们以使其更简单。
答案 2 :(得分:0)
首先,确保您确实需要所有ifdef
语句。也许有一种方法可以重构它们以保持嵌套的数量,如果检查有限?假设你确实需要它们:
将第一部分(包含)分成单独的包含文件是个好主意:
在your_header.h
:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#endif
然后在实现文件中,您可以保持更加理智。自由空白行和注释是我通常采用的非缩进#ifdef
检查方法。
#ifndef __WIN32__
#ifdef SOMEOTHER
stmts
// SOMEOTHER
#endif
maybe stmts
// __WIN32__
#endif
所有这一切,没有规则,如果它使代码更具可读性,你就不能缩进预处理器检查。
答案 3 :(得分:0)
这个问题已经有很多有效的答案。对于想要视觉图像的人来说就是这样。
在Visual Studio中,转到选项搜索indent
并选择您的语言。就我而言,它是c ++。当您在选项之间切换时,Visual Studio会向您显示以下示例。
答案 4 :(得分:-1)
&#34;所有这一切,没有规则,如果它使代码更具可读性,你就不能缩进预处理器检查。&#34;
不,但是在一个控制了样式且调整代码以匹配它的世界中,最好使样式缩进#if
语句,如if
语句。
虽然#if
在技术上可能是一种不同的语言,但它是C / C ++规范的一部分,因为它不是任何当前关键字的字母匹配字母,所以没有理由#if
可以不适合造型。