C++ 如何缩进预处理器语句?
当有许多预处理器语句和许多#ifdef级联时,很难获得概述,因为它们通常不缩进。e、 gC++ 如何缩进预处理器语句?,c++,indentation,code-formatting,C++,Indentation,Code Formatting,当有许多预处理器语句和许多#ifdef级联时,很难获得概述,因为它们通常不缩进。e、 g #ifdef __WIN32__ #include <pansen_win32> #else #include <..> #ifdef SOMEOTHER stmts #endif maybe stmts #endif #ifdef_uuwin32__ #包括 #否则 #包括 #如果有人 STMT #恩迪夫 也许是STMT #恩迪夫 当我考虑缩进这些预处理器语句时,我担心会与一般
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
#ifdef_uuwin32__
#包括
#否则
#包括
#如果有人
STMT
#恩迪夫
也许是STMT
#恩迪夫
当我考虑缩进这些预处理器语句时,我担心会与一般缩进级别混淆。那么,如何以一种漂亮的方式解决这个问题呢?
仅仅因为预处理指令“通常”不缩进并不是不缩进它们的好理由:#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
#ifdef_uuwin32__
#包括
#否则
#包括
#如果有人
STMT
#恩迪夫
也许是STMT
#恩迪夫
如果您经常有多个级别的预处理指令嵌套,则应重新编写它们以使其更简单。首先,确保您确实需要所有的
ifdef
语句。也许有一种方法可以重构它们,以限制嵌套if检查的数量?假设您确实需要它们:
最好将第一部分(include)分离到一个单独的include文件中:
在您的_header.h
中:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#endif
尽管如此,没有规则规定不能缩进预处理器检查它是否使代码更具可读性。正如您所说,我还没有决定缩进的最佳方式,但我在不止一个地方发现了这种替代缩进方式,即#始终放在第一列,只缩进关键字:
#ifdef __WIN32__
# include <pansen_win32>
#else
# include <..>
#endif
备选方案(b)
备选方案(c)
在这一点上,它变成了一个个人品味的问题,就像许多其他缩进样式一样。“尽管如此,没有规则不能缩进预处理器检查代码是否更具可读性。”
不,但在一个控制样式并调整代码以匹配的世界中,最好启用样式缩进#if
语句,如if
语句
虽然
#if
在技术上可能是一种不同的语言,但它是C/C++规范的一部分,并且它不是任何当前关键字的字母匹配,因此没有理由在样式中不能容纳#if
s。这个问题已经有很多有效的答案。对于想要视觉图像的人来说,这就是
在visual studio中,转到选项搜索缩进并选择您的语言。在我的例子中,它是C++。在选项之间切换时,VisualStudio将向您展示下面的示例
我删除#ifdef的时间比缩进它们的时间要多。:-)纯ANSI C不允许这样做:请看。@DipanMehta:那个线程不是这么说的。该线程表示,前标准C不允许缩进预处理指令。这可能是真的(我不知道,因为C已经标准化22年了,所以这没什么大不了的)。但是,在标准C(C90和C99)中,通常都称为“ANSI C”,C++中,预处理指令可能缩进。
#ifdef __WIN32__
# include <pansen_win32>
#else
# include <..>
#endif
for (...)
{
if (foo)
{
if (bar)
{
#ifdef __WIN32__
c = GetTickCount();
#else
c = clock();
#endif
}
}
}
for (...)
{
if (foo)
{
if (bar)
{
#ifdef __WIN32__
c = GetTickCount();
#else
c = clock();
#endif
}
}
}
for (...)
{
if (foo)
{
if (bar)
{
# ifdef __WIN32__
c = GetTickCount();
# else
c = clock();
# endif
}
}
}