缩进C代码,Unix

时间:2016-01-05 16:07:49

标签: c linux unix indentation

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

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

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

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

并且在main之前的这个int给了我毛骨悚然。

任何人都可以告诉我这方面的选择吗?

2 个答案:

答案 0 :(得分:1)

您感兴趣的特定选项是

  

<强> -npsl
  的 --dont-break-procedure-type
  将过程的类型放在与其名称相同的行上。

     

<强> -brf
  的 --braces-on-func-def-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;
}

我没有看到在{字符前压缩空格的选项。

答案 1 :(得分:0)

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

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

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

您可以检查是否在公共类型-psl中加入-kr并将其删除,如果不包括在内,您可以指定-npsl--dont-break-procedure-type)和类型不会放在单独的行上。

所有选项都需要权衡。我喜欢与int main() {在同一行上的大括号,但对于函数定义,我喜欢下一行的大括号。 e.g:

type function
{
    ...
}

因此,如果您具有相互排斥的偏好,则只需选择要包含大部分代码的首选项,然后调整其余部分。您可以尝试进行以下调用:

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

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