当有很多预处理语句和很多 #ifdef 级联时,通常它们不会进行缩进,这使得很难获得总体概览。例如:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
如果我同时考虑将预处理器语句的缩进也调整好,我担心会与一般的缩进水平混淆。那么你如何以简洁美观的方式解决这个问题呢?
当有很多预处理语句和很多 #ifdef 级联时,通常它们不会进行缩进,这使得很难获得总体概览。例如:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
如果我同时考虑将预处理器语句的缩进也调整好,我担心会与一般的缩进水平混淆。那么你如何以简洁美观的方式解决这个问题呢?
仅仅因为预处理指令通常不缩进并不是不缩进它们的好理由:
#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#ifdef SOMEOTHER
stmts
#endif
maybe stmts
#endif
如果你经常有多层嵌套的预处理指令,你应该重新设计它们以使其更简单。
像你一样,我也还没有确定最好的缩进方式,但我在多个地方发现了这种备选缩进方式,即将#号始终放置在第一列,只缩进关键字:
#ifdef __WIN32__
# include <pansen_win32>
#else
# include <..>
#endif
在Visual Studio中,当您将#作为第一个字符键入时,它总是将其缩进到左侧,因此看起来微软要么偏爱不对预处理器语句进行缩进,要么使用上述格式。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
}
}
}
for (...)
{
if (foo)
{
if (bar)
{
# ifdef __WIN32__
c = GetTickCount();
# else
c = clock();
# endif
}
}
}
到这个时候,这就成为一个个人口味的问题,就像许多其他缩进风格一样。
c = ...
语句也需要缩进。 - endolithifdef
语句。也许有一种重构它们以限制嵌套if检查数量的方法?假设您确实需要它们:your_header.h
中:#ifdef __WIN32__
#include <pansen_win32>
#else
#include <..>
#endif
然后在实现文件中,您可以保持更加清晰明了。对于非缩进的#ifdef
检查,我通常采用自由空白行和注释的方法。
#ifndef __WIN32__
#ifdef SOMEOTHER
stmts
// SOMEOTHER
#endif
maybe stmts
// __WIN32__
#endif
话虽如此,如果缩进预处理器检查可以使代码更易读,那么并没有规定你不能这样做。
尽管如此,如果缩进预处理器检查可以使代码更易读,则没有规则禁止这样做。
不过,在一个风格受控且代码被调整以匹配该风格的世界中,启用缩进#if
语句就像if
语句一样是很好的。
虽然#if
技术上可能是一种不同的语言,但它是C/C++规范的一部分,并且由于它不是任何当前关键字的逐字匹配,因此没有理由不能在样式中容纳#if
。