【发布时间】:2016-04-09 13:32:32
【问题描述】:
我正在用 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
那么,我可以做些什么来将上面的缩进视为默认值?
【问题讨论】:
-
预处理器指令不会在程序结构中执行,因此您不应该缩进这种条件编译(与条件代码不同!)代码。你也不应该缩进指令本身。只需从第 1 列开始。
-
注意:
#else #ifdef X正在翻译为#elif defined(X) -
是的,你自己缩进你的代码。没有必要为此依赖编辑,恕我直言,这是一个让人懒惰的坏习惯。您不会花太多时间缩进代码。
-
@iharob 我确实是一个初学者程序员,但我想知道:为什么习惯自动缩进是一个坏习惯?我的意思是,这难道不是人们使用文本编辑器的原因之一吗?
-
你可以使用自动缩进就好了,不要习惯编辑器为你缩进代码。不是每个人都喜欢预处理器宏缩进,所以这可能是你的 vim 行为如此的原因。您可以尝试在代码格式方面使用更复杂的编辑器,vim 但是由于编辑机制,它非常适合编辑代码。
标签: c vim indentation c-preprocessor code-formatting