indent 命令

用途

重新格式化一个 C 语言程序。

语法

缩进 InputFile [ OutputFile ] [ -nbad | -bad ] [ -nbap | -bap ] [ -nbbb | -bbb ] [ -nbc | -bc ] [ -br | -bl ] [ -c n ] [ - cdn ] [ -ncdb | -cdb ] [ -nce | -ce ] [ -ci n ] [ -cli n ] [ -d n ] [ -di n ] [ -ndj | -dj ] [ -nei | -ei ] [ -fa ] [ -nfa ] [ -nfc1 | -fc1 ] [ -i n ] [ -nip | -ip ] [ -l n ] [ -lc n ] [ -nlp | -lp ] [ -npro ] [ -npcs | -pcs ] [ -nps | -ps ] [ -npsl | -psl ] [ -nsc | -sc ] [ -nsob | -sob ] [ -nslb | -slb ] [ -st ] [ -troff ] [ -nv | -v ] [ - TType ]...

描述

indent 命令按照随命令输入的标志所指定的格式重新格式化一个 C 程序。

如果只指定 InputFile 参数,重新格式化的文件写回 InputFile 参数,并且该参数的一个 InputFile 的备份副本写入当前目录,文件名带 .BAK 后缀。

如果指定 OutputFile 参数indent 命令将执行检查以确保它的名称与 InputFile 参数并不相同。

要为 indent 命令设置自己的缺省概要文件,在您的登录目录或当前目录中创建一个名为 .indent.pro 的文件。 在这个文件中,包含所期望数目的标志,这些标志用空格、制表符或换行符隔开。

当前目录下 .indent.pro 文件中的标志覆盖那些在您的登录目录下的标志(除了 -T Type 标志,它是累积的)。 如果 indent 命令运行并且一个概要文件存在,将读取概要文件以设置程序的缺省配置。 然而,命令行上的标志覆盖概要文件标志。

注释处理

indent 命令假定紧跟在起始注释标记(/*-/**)后带 -(破折号)或 *(星号)的任何注释是用星号包围的注释。 除了缩进,每行注释保持不变。 在注释的第一行,可以调整该缩进来说明这个变化。

其他注释被视为文本。 indent 命令在一行中放入尽量多的单词(由空格、制表符或换行符隔开)。 每段由几个空行隔开。

块注释不在代码的右边且超过一行。

如果注释在已带有代码的行中,注释从由 -cn 标志设置的注释列开始。 否则,注释从 n 缩进级别开始,这些缩进级别小于代码当前的位置,其中 n-dn 标志指定。 如果一行中的代码超过了注释列,注释从更靠右边的地方开始。 在极端情况下,右页边距能被自动地扩展。

预处理器行处理

通常,indent 命令单独给预处理器留几行。 它仅做的重新格式化是整理尾端的注释。 它只留下嵌入式注释。 条件编译(在 #ifdef#endif 间的代码行)被识别并且 indent 命令试图为引入的语法特性做正确地补偿。

C 语法处理

内置于 indent 命令中的解析器试图处理不完整和格式错误的语法。 特别情况下,宏的使用如下:

#define forever for(;;)

可得到正确处理。 为了获取最好的结果,在语法正确的源文件上用 indent 命令。

标志

注: 标志可以出现在文件名之前或之后。

描述
-糟糕 在每个声明块后,强制加一个空行。
恩巴德 禁止在每个声明块后加一个空行;除非用 -bad 标志关闭该标志,否则该标志处于活动状态。
巴普 强制在每个过程体后加一个空行。
恩巴普 禁止在每个过程体后加一个空行;除非用 -bap 标志关闭该标志,否则该标志处于活动状态。
-bbb 强制在每个块注释前加一个空行。
-nbbb 禁止在每个块注释前加一个空行;除非用 -bbb 标志关闭该标志,否则该标志处于活动状态。
-bc 强制在声明中的每个逗号后换行。
-nbc 禁止在声明中的每个逗号后换行;除非用 -bc 标志关闭该标志,否则该标志处于活动状态。
-布尔 格式化复合语句、结构初始化、枚举初始化,如下:
if (...)
{
   code
}
-兄弟 格式化复合语句、结构初始化、枚举初始化,如下:
 if (...) {
    code
}

除非用 -bl 标志关闭该标志,否则该标志处于活动状态。

-cN 将代码注释的初始制表符位置设为 n 变量。 缺省值是 33。
-cdN 将声明注释的初始制表符位置设为 n 变量。 缺省情况下,该标志使用 -c 标志定义的值。
-cdb 在空行中启用放置注释定界符;除非用 -ncdb 标志关闭该标志,否则该标志处于活动状态。 -cdb 标志仅仅影响块注释,不影响到代码右边的注释。 生成的注释类似于以下内容:
/*
 * this is a comment
 */
-ncdb 在空行中禁用放置注释定界符。 -ncdb 标志仅仅影响块注释,不影响到代码右边的注释。 生成的注释类似于以下内容:
/* this is a comment */
-切 启用强制 else 语句来紧跟前面的 }(右括号);除非用 -nce 标志关闭该标志,否则该标志处于活动状态。
-nce 禁用强制 else 语句来紧跟前面的 }(右括号)。
-我N 从语句的第一行开始处缩进连续行 n 个位置。 括号中的表达式内添加了额外的缩进以表明嵌套,除非 -lp 标志有效。 在缺省情况下,该标志使用 -i 标志定义的值。
-cliN 将条件标签向包含标志的语句右侧缩进 n 个位置。 输入 -cli0.5 使条件标签缩进跳格的一半。 这个选项是唯一接受小数参数的选项。 缺省情况下,该值为 -cli0
-dN n 变量控制不在代码右边的注释的放置。 指定 -d1 标志使这种注释看起来向代码左边缩进一级。 缺省情况下,该标志使用 -d0 同时注释和代码对齐。 相对于程序代码的注释行的位置影响注释缩进。
-迪N n 变量,指定来自先前声明的关键字中的标识的缩进位置数。 缺省情况下,该标志使用 -di16
-dj 左调整声明。
-ndj 缩进声明;除非用 -dj 标志关闭该标志,否则该标志处于活动状态。
-伊 启用特别 else-if 处理;除非用 -nei 标志关闭该标志,否则该标志处于活动状态。 -ei 标志引起跟着 else 语句的 if 语句和前面的 if 语句有相同的缩进。
-内伊 禁用特别 else-if 处理。
-法 将分配运算符从旧式 C 代码翻转到 ANSI 格式。 该标志保持活动状态,除非用 -nfa 标志关闭该标志。

注:如果代码用于 ANSI 编译器,那么可以更改代码的含义。 例如,A=-BA-=B.

注:在运算符间不使用空格。 如果用户的意思是减,那么翻转是必须的;另一方面,如果用户的意思是 A 等于负 B,翻转则改变含义。

-恩法 禁止翻转运算符。 如果代码是为 ANSI 编译器写的,用该标志。
-fc1 可以格式化在列 1 中开始的注释;除非用 -nfc1 标志关闭该标志,否则该标志处于活动状态。
-nfc1 不能格式化在列 1 中开始的注释。
-一N 设置缩进级别大小。 缺省情况下,级别大小是位置 8。
-ip 启用缩进参数声明;除非用 -nip 标志关闭该标志,否则该标志处于活动状态。
-尼普 禁用缩进参数声明。
描述
-我N 设置代码右端注释的最大列的位置。 如果注释一行放不下,那么最多打印 25 个字符。
-lcN 将块注释最大行长度设为 n 变量。 缺省情况下,该标志使用由 -l 标志指定的长度。
-lp 在连续行中对齐由括号包围的代码;除非用 -nlp 标志关闭该标志,否则该标志处于活动状态。 如果在一行中有左括号而无右括号相匹配,续行在随着左括号的位置处开始。

-lp 标志有效时,这些行显示如下:

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

插入两行或更多换行产生以下结果:

p1 = first_procedure(second_procedure(p2,
                                      p3),
                     third_procedure(p4,
                                     p5));
-自然语言处理 使有括号包围的代码在连续行中不对齐。 在 -nlp 标志有效时,这些行显示如下:
p1 = first_procedure(second_procedure(p2,p3),
         third_procedure(p4, p5));
-npro 使概要文件 ./.indent.pro$HOME/.indent.pro 被忽略。
-件 在每个过程调用名称和跟着的 ((左括号)间插入一个空格。
-非玩家角色 禁止在每个过程调用名称和跟着的 ((左括号)间插入一个空格;除非用 -pcs 标志关闭该标志,否则该标志处于活动状态。
-ps -> 运算符后面的指针的两侧插入空格。
-nps 除非使用 -ps 标志关闭,否则禁止在 -> 运算符后面的指针两侧显示空格; 处于活动状态。
-psl 左对齐已定义过程名;除非用 -npsl 标志关闭该标志,否则该标志处于活动状态。 如果有过程类型,保留在前面的行里。
-恩普斯尔 禁用已定义过程名左对齐。
-sc 使 *(星号)放置在注释的左边;除非用 -nsc 标志关闭该标志,否则该标志处于活动状态。
-nsc 禁止将 *(星号)放置在注释的左边。
-斯布 将任何不在代码右边的单行注释视为一个块注释。
恩斯尔布 禁用将任何不在代码右边的单行注释视为一个块注释 ;除非用 -slb 标志关闭该标志,否则该标志处于活动状态。
-索布 删除可选的空行。 和以下任何标志的合作工作:-nbad-nbap、或 -nbbb。 仅删除那些用 -bad-bap-bbb 标志插入的空白行。
恩索布 保留可选的空白行;除非用 -sob 标志关闭该标志,否则该标志处于活动状态。
-圣 使 indent 命令从标准输入获得输入并输出到标准输出。
-T类型 Type 变量添加到关键字类型列表。 名称可累积以便 -T 能被指定多次。 应当指定在程序中出现的由 typedef 语句定义的所有类型,以从 indent 命令产生最好的输出。
特罗夫 格式化 C 程序,以进行 troff 处理。 产生一个与由 vgrind 命令产生的列表相似的列表。 如果没有输出文件被指定,缺省是标准输出,而不是在适当的位置上格式化。
-v 打开详细方式,报告什么时候一行输入被分成两行或多行输出,并在完成后给出大小统计。
-nv 关闭详细方式;除非用 -v 标志关闭该标志,否则该标志处于活动状态。

示例

  1. 要格式化test.c使用 缩进 命令的缺省设置,并将输出放入newtest.c文件,输入:
    indent test.c newtest.c
  2. 要格式化test.c文件,以便在每个声明块和过程主体后强制使用空白行,使用所有其他缺省设置,并将输出存储在newtest.c文件,输入:
    indent test.c newtest.c -bad -bap
  3. 要格式化test.c并使用 缩进 命令的缺省设置来定义文件uint作为 缩进 命令可识别的类型关键字,请输入:
    indent test.c newtest.c -Tuint

文件

描述
./.indent.pro 包含概要文件。
$HOME/.indent.pro 包含概要文件。
/usr/ccs/bin/indent 包含 indent 命令。