我正在用 C 编写一个程序,它应该根据符号常量的定义而不同。举个简单的例子,我的第一个想法就是这样写:
#include <stdio.h>
#define TEST
int main(void) {
int num;
#ifdef TEST
num=1;
printf("YES\n");
#else
num=0;
printf("NO\n");
#endif
printf("%d\n", num);
return 0;
}
然而,在尝试自动缩进我的代码时(特别是在vim中使用gg=G
),我的缩进丢失了:
#include <stdio.h>
#define TEST
int main(void) {
int num;
#ifdef TEST
num=1;
printf("YES\n");
#else
num=0;
printf("NO\n");
#endif
printf("%d\n", num);
return 0;
}
当然,如果我尝试自动缩进以下内容(其间有实际命令),则会发生混乱:
#ifdef TEST1
commands
#ifdef TEST2
commands
#else
#ifdef TEST3
commands
#endif
commands
#endif
#endif
那么,我可以做些什么来将上面的缩进视为默认值?
答案 0 :(得分:2)
简短的回答是:编辑的自动缩进遵循既定的语言准则,而您正在尝试做的事情并未被视为良好做法&#39;因此没有在任何编辑器中实现(至少我已经看过)。
更长的答案:C语言没有任何缩进规则,因此任何缩进都是通过惯例进行的。不同的人对他们的既定实践理想有不同的看法。特别是对于预处理器条件,我从来没有见过任何人使用任何额外的深度 - 和IMO这将是不好的做法,因为当与语言条件混合时会变得非常混乱(即如果(代码)) 看看这两个基本的例子:
if (conditional1)
action1();
#if compileoption1
else if (conditional2)
action2();
#else
action3();
#endif
和
#if compileoption1
if (conditional1)
#endif
action1();
通过缩进来遵循逻辑是完全不可能的。预处理器和实际编译器是独立的步骤,预处理器步骤不关注实际的C语义,因此条件可以在与C流控制语句完全正交的位置开始和结束(if,while,for等。 ..),很难通过缩进等方法来统一它们。在我看来,为什么不将缩进用于预处理器条件已成为标准做法。 对于一些成熟的约定,请参阅内核编码指南: https://www.kernel.org/doc/Documentation/CodingStyle
第20章讨论条件编译。