缩进 C 代码,Unix

Indenting C code, Unix

我在文档中搜索了缩进,但最终我放弃了,我想这样缩进代码:

int main(int argc, char **argv){
    some code;
}

我知道缩进 -kr 给你这样的大括号,但 -kr 样式还包括

int
main(int argc, char **argv){
    some code;
}

在 main 之前的这个 int 让我毛骨悚然。

有人可以告诉我这个选项吗?

您感兴趣的特定选项是

-npsl
--dont-break-procedure-type
Put the type of a procedure on the same line as its name.

-brf
--braces-on-func-def-line
Put braces on function definition line.

按照建议,GNU indent manual 描述了各种选项。

这是一个快速脚本,用于说明这些选项对基本预定义样式的影响:

#!/bin/sh
for opt in gnu linux orig kr
do
    echo "** $opt"
    indent -st -$opt -npsl -brf hello.c
done

和输入文件:

#include <stdio.h>

int main(int argc, char **argv) { int n; for (n = 0; n < argc; ++n) printf("arg%d=%s\n", n, argv[n]); return 0; }

和相应的输出:

** gnu
#include <stdio.h>

int main(int argc, char **argv) {
    int n;
    for (n = 0; n < argc; ++n)
        printf("arg%d=%s\n", n, argv[n]);
    return 0;
}
** linux
#include <stdio.h>

int main(int argc, char **argv) {
    int n;
    for (n = 0; n < argc; ++n)
        printf("arg%d=%s\n", n, argv[n]);
    return 0;
}
** orig
#include <stdio.h>

int main(int argc, char **argv) {
    int             n;
    for (n = 0; n < argc; ++n)
        printf("arg%d=%s\n", n, argv[n]);
    return 0;
}
** kr
#include <stdio.h>

int main(int argc, char **argv) {
    int n;
    for (n = 0; n < argc; ++n)
        printf("arg%d=%s\n", n, argv[n]);
    return 0;
}

我没有看到抑制 { 字符前的 space 的选项。

您可能正在寻找 -npsl 选项。 -psl (--procnames-start-lines) 选项使正在定义的过程类型放在过程名称之前的行中。因此,如果您指定该选项,所有函数声明都将更改为:

int main(int argc, char **argv){
    some code;
}

int
main(int argc, char **argv){
    some code;
}

您可以检查您是否在普通类型 -kr 中包含 -psl 并将其删除,或者如果不包含,您可以指定 -npsl (--dont-break-procedure-type)并且类型不会单独放在一行。

有trade-off所有选项。我喜欢和 int main() { 在同一行的大括号,但是对于函数定义我喜欢在下一行的大括号。例如:

type function
{
    ...
}

因此,如果您有诸如此类的相互排斥的偏好,您只需选择您希望大部分代码合并的偏好,然后调整其余的。您可以尝试以下调用:

indent -i 4 -lp -ts 8 -lp -lps -br -brs -blf -ce -cdw -pcs -bs -nbc -npsl -saf -sai -saw -nut

这是一种平衡的缩进方案。