Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

indent(1)

Name

indent - 对 C 程序源文件进行缩排和格式设置

Synopsis

indent input-file [ output-file ] [ [ -bap | -nbap ]
     [ -bacc | -nbacc ] [ -bad | -nbad ] [ -bbb | -nbbb ]
     [ -bc | -nbc ] [ -bl ] [ -br ] [ -bs | -nbs ] [ -cn ]
     [ -cdn ] [ -cdb | -ncdb ] [ -ce | -nce ] [ -cin ] [ -clin ]
     [ -dn ] [ -din ] [ -dj | -ndj ] [ -eei | -neei ]
     [ -ei | -nei ] [ -fc1 | -nfc1 ] [ -in ] [ -ip | -nip ]
     [ -ln ] [ -lcn ] [ -lp | -nlp ] [ -pcs | -npcs ] [ -npro ]
     [ -psl | -npsl ] [ -sc | -nsc ] [ -sob | -nsob ] [ -st ]
     [ -T typename ] [ -troff ] [ -v | -nv ]

Description

indent 是一个 C 程序格式设置工具。它可根据开关重新设置 input-file 中 C 程序的格式。可指定的开关如下所述。它们可能出现在文件名之前或之后。

注意:如果仅指定 input-file,格式设置“原地”完成,即经过格式设置的文件写回 input-fileinput-file 的备份副本写入当前目录。如果 input-file 指定为 /blah/blah/file,则备份文件名为 file.BAK

如果指定了 output-fileindent 会检查以确保它不同于 input-file

Options

下方列出的选项控制 indent 利用的格式设置样式。

-bacc,-nbacc

如果指定了 -bacc,会在每个条件编译块周围强制设置一个空白行。例如,在每个 #ifdef 前面以及在每个 #endif 后面。将吞并这些周围的其他空白行。缺省值:-nbacc

-bad,-nbad

如果指定了 -bad,会在每个声明块后面强制设置一个空白行。缺省值:-nbad

-bap,-nbap

如果指定了 -bap,会在每个过程主体后面强制设置一个空白行。缺省值:-nbap

-bbb,-nbbb

如果指定了 -bbb,会在每个块注释前面强制设置一个空白行。缺省值:-nbbb

-bc,-nbc

如果指定了 -bc,则会在声明中每个逗号后面强制设置一个换行符。-nbc 可关闭此选项。缺省值:-bc

-br,-bl

指定 -bl 可使复合语句按如下方式排齐:

 
if (...)
{
               code
}

指定 -br(缺省值)可使它们如下所示:

 
if (...) {
               code
}
-bs,-nbs

启用(禁用)在 sizeof 后面强制设置一个空白。有些人认为,sizeof 应该如同过程调用一样出现(-nbs,缺省值);有些人认为,由于 sizeof 是一个运算符,所以始终应该这样对待,并且它后面始终应该有一个空白。

-cn

代码注释开始的列。缺省值为 -c33

-cdn

声明注释开始的列。缺省设置是使这些注释开始的列与代码注释的相同。

-cdb,-ncdb

启用(禁用)在空白行上放置注释分隔符。如果启用了此选项,注释如下所示:

 
/*
* this is a comment
*/

而不是如下所示:

/* this is a comment */

这仅影响块注释,而不影响代码右侧的注释。缺省值:-cdb

-ce,-nce

启用(禁用)强制 else 紧接着前面紧靠的 '}'。缺省值:-ce

-cin

将继续缩排设置为值 n。续行将从语句第一行的开头缩排值 n。除非 -lp 有效,否则扩入括号的表达式添加额外的缩排以表示嵌套。-ci 的缺省值与 -i 相同。

-clin

使条件标签向包含的 switch 语句右侧缩排 n 个制表停止位置。-cli0.5 使条件标签缩排半个制表停止位置。缺省值:-cli0

-dn

控制不在代码右侧的注释的位置。缺省值 -d1 意味着,将此类注释向代码左侧放置一个缩排级别。指定 -d0 可使这些注释与代码排齐。请参见下文关于注释缩排的部分。

-din

以字符位置指定从声明关键字到后跟标识符的缩排。缺省值:-di16

-dj,-ndj

-dj 向左对齐声明。-ndj 缩排声明的方式与代码相同。缺省值:-ndj

-ei,-nei

如果启用了 -eielse 后跟 if 的缩排与前面的 if 语句相同。如果禁用了此选项,else 后跟的 if 将缩排一个额外级别。缺省值:-ei

-eei,-neei

如果指定了 -eei,额外表达式缩排将应用于 if() 和 while() 表达式部分的续行。这些续行将缩排一个额外级别-两次而非仅仅一次。这样做是为了避免继续表达式与 if() 或 while() 后跟的语句发生混淆。缺省值:-neei

-fc1,-nfc1

启用(禁用)从第 1 列开始的注释的格式设置。通常,前导 '/' 在第 1 列中的注释已由程序员小心地手动设置格式。在这种情况下,应使用 -nfc1。缺省值:-fc1

-in

一个缩排级别的空格数量。缺省值是一个制表停止位置 -i8

-ip,-nip

启用(禁用)参数声明从左边界缩排。缺省值:-ip

-ln

带有结尾注释的输出行的最大长度。缺省值:-l78

-lcn

将块注释的行长度设置为 n。缺省值与使用 -l 指定的常规行长度相同。

-lp,-nlp

使续行中由括号括起的代码排齐。如果某个行中的左括号在该行中未闭合,则续行将排齐,从左括号后面的字符位置开始。例如,在 -nlp 有效的情况下,继续代码如下所示:

 
p1 = first_procedure(second_procedure(p2, p3),
               third_procedure(p4, p5));

-lp 有效的情况下(缺省值),代码看起来比较清晰:

 
p1 = first_procedure(second_procedure(p2, p3),
                       third_procedure(p4, p5));

多插入几个换行符,将得到:

 
p1 = first_procedure(second_procedure(p2, p3),         
                       third_procedure(p4, p5));

此示例是使用 -lp 生成的。

-npro

忽略分析文件 ./.indent.pro~/.indent.pro

-pcs , -npcs

如果为 true (-pcs),则源代码中的所有过程调用和声明都将在名称和 '(' 之间插入一个空格。缺省值:-npcs

-psl , -npsl

如果为 true (-psl),则定义的过程的名称将放入第 1 列-其类型(如果有)将在前几行左侧。缺省值:-psl

-sc,-nsc

启用(禁用)在所有注释左边界放置星号 ('*')。缺省值:-sc

-sob,-nsob

如果指定了 -sob,缩排将吞并可选空白行。可使用此选项除去声明后面的空白行。缺省值:-nsob

-st

indent 从标准输入接受输入,将其输出放入标准输出。

-T typename

typename 添加到类型关键字列表中。名称会累积:-T 可指定多次。您需要指定出现在由 typedef 定义的程序中的所有类型名称-如果漏掉一些也无妨,但是程序的格式设置不会非常理想。这听起来像是必须要做的烦人的事情,但是在 C 中确实是问题的症状:typedef 会导致语言的语法发生变化,indent 无法找到所有 typedef

-troff

使 indent 对程序进行格式设置,以便由 troff 处理。它将生成一个别致的列表,其精髓与 vgrind 大致一样。如果未指定输出文件,则缺省值是标准输出,而非原地进行格式设置。要获得经过 troff 处理的列表,常规方法是使用命令

indent -troff program.c | troff -mindent
-v,-nv

-v 可打开“详细”模式,-nv 可将其关闭。在详细模式下时,如果将一行输入拆分为两行或多行输出,indent 会报告,并在完成时提供一些大小统计信息。缺省值:-nv

Usage

您可以将自己缺省的“分析”设置为 indent,方法是在登录目录或当前目录中创建名为 .indent.pro 的文件,包括需要的所有开关。当前目录中的 .indent.pro 优先于登录目录中的该文件。如果运行 indent 且存在分析文件,则会读取它来设置程序的缺省值。但是,命令行中的开关始终覆盖分析文件开关。开关应该由空格、制表符或换行符分隔。

注释

框起

indent 假定注释开头后面紧跟短划线或星号(即 '/*-''/**')的任何注释都是由一方框星号框起的注释。此类注释的每一行保持不变,但其缩排可能进行调整,以体现注释第一行缩排的变化。

整齐文本

将其他所有注释都视为整齐文本。indent 在行中容纳尽可能多的词语(由空格、制表符或换行符分隔)。空白行可打断段落。

注释缩排

如果注释在带有代码的行中,则在注释列中开始,这由 -cn 命令行参数设置。否则,注释的开始位置比代码当前放置的位置小 n 个缩排级别,其中 n-dn 命令行参数指定。如果代码所在的行扩展超过注释列,则注释的开始位置进一步向右,在极端情况下,右边界可能会自动扩展。

预处理程序行

一般来说,indent 不干预预处理程序行。唯一要做的重新格式设置工作是整理结尾注释。不干预嵌入注释。可识别条件编译 (#ifdef...#endif),并且 indent 尝试对引入的语法独特性进行适当弥补。

C 语法

indent 对 C 语法非常了解,但是它有“宽容的”解析程序。它尝试处理不完整和格式错误的语法的正常排序。尤其是,如下宏的使用:

#define forever for(;;)

将经过正确处理。

/*INDENT OFF*/ /*INDENT ON*/

不干预这两个注释之间的所有文本。因此,将源代码放在这两个注释之间时,不受重新设置格式的影响。

Files

./.indent.pro

分析文件

~/.indent.pro

分析文件

See also

troff(1)

Bugs

往往导致失败的常见错误是向 shell 中键入:

indent *.c

以尝试缩排目录中的所有 C 程序。