一、Linux下C代码格式化工具indent

引言

每个人的编程风格不尽相同,Linux作为开源项目,为了保证源码的可阅读性,就需要遵循Linux要求的“规则”,在内核源码的Documentation/CodingStyle中详细地记录了Linux的编程风格。大家感兴趣的话,可以去looklook。本文重点在于:GNU提供的格式化工具——indent。indent可用于从一种C代码的风格转换为另一种风格。

使用方法

执行以下命令,安装软件indent,执行Linux内核源码提供的脚本Lindent,便可以对我们的驱动代码进行格式化。

sudo apt install indent
./内核所在目录/scripts/Lindent my_module.c

贴一下脚本Lindent的代码:

#!/bin/sh
PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1"
RES=`indent --version`
V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1`
V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2`
V3=`echo $RES | cut -d' ' -f3 | cut -d'.' -f3`
if [ $V1 -gt 2 ]; then
  PARAM="$PARAM -il0"
elif [ $V1 -eq 2 ]; then
  if [ $V2 -gt 2 ]; then
    PARAM="$PARAM -il0";
  elif [ $V2 -eq 2 ]; then
    if [ $V3 -ge 10 ]; then
      PARAM="$PARAM -il0"
    fi
  fi
fi
indent $PARAM "$@"

以上就是如何使用indent对我们的驱动代码进行格式化,标准化的一个流程,相当之简单,到这里就结束。后续的内容都是介绍indent工具的详细用法。

命令语法

indent [options] [input-files]

indent [options] [single-input-file] [-o output-file]

备份文件

indent会自动为我们的输入文件进行备份,默认的备份文件名是在原文件名的基础上加上“”,例如,文件名为“main.c”,对应的备份文件名为“main.c”。
我们可以通过设置环境变量SIMPLE_BACKUP_SUFFIX,来设置备份文件的后缀,例如,

export SIMPLE_BACKUP_SUFFIX=".bak"

这样的话,文件名为“main.c"的文件就变为“main.c.bak"。

常见的代码风格

  • 默认风格GUN
-nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2
-ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -nprs -psl -saf -sai
-saw -nsc -nsob
  • Kernighan&Ritchie风格
-nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0
-cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs
-nprs -npsl -saf -sai -saw -nsc -nsob -nss
  • original Berkeley风格
	
-nbad -nbap -bbo -bc -br -brs -c33 -cd33 -cdb -ce -ci4 -cli0
-cp33 -di16 -fc1 -fca -hnl -i4 -ip4 -l75 -lp -npcs -nprs -psl
-saf -sai -saw -sc -nsob -nss -ts8
  • Linux风格
-nbad -bap -nbc -bbo -hnl -br -brs -c33 -cd33 -ncdb -ce -ci4 
-cli0 -d0 -di1 -nfc1 -i8 -ip0 -l80 -lp -npcs -nprs -npsl -sai
-saf -saw -ncs -nsc -sob -nfca -cp33 -ss -ts8 -il1

空行(blank Line)

indent对空行的处理有以下几个选项:

  • -bad: 在变量定义以及注释之前加入空行
char *foo;
float *bar;
//int type 
int baz;

经过indent格式化后,就变成了

char *foo;
float *bar;

//int type 
int baz;
  • -nbad:与选项bad相反,在两者之间不加入空行
  • -bap:在程序主体之间加入空行,例如:
void func (void)
{


}
int main (void)
{

return 0;
}

上述代码中,main函数与func函数之间没有空行,使用bap选项进行格式化之后,变成:

void
func (void)
{


}

int
main (void)
{

  return 0;
}

  • -nbap:与bap相反,在两者之间不加入空行;
  • -bbb:注释前加入空行;
  • -nbbb:与选项bbb相反;
  • -sob:删除多余的空行,不包括indent格式化输出的空行;

注释

关于注释部分,C代码是以/* */进行代码的注释,indent会保留以下格式的注释,也就是不会被进行格式化

/**********************
 * Comment in a box!! *
 **********************/

/*
* A different kind of scent,
* for a different kind of comment.
*/

Comments which are not boxed comments may be formatted, which means that the line is broken to fit within a right margin and left-filled with whitespace.
提供以下选项:

  • fc1:针对放在每行最前端的注释,设置其格式。(PS:这里最后一个字符是阿拉伯数字1)
  • -fca:设置所有注释的格式。
  • -dn:针对不是放在程序码右侧的注释,设置其缩排格数。
 //comment

若执行indent -d2,则会变成:(上面的代码前有两个空格,被删除了)

//comment
  • cn:将注释置于程序码右侧指定的第n栏。
  • -cdb:注释符号自成一行,通常结合下面的sc一起使用
  • -sc:将"*"放在多行注释的开头。例如:
/* Loving hug */

执行indent -cdb -sc,则会变成

  /*
   * Loving hug
   */

你可能感兴趣的:(Linux学习之路,linux)