INDENT
Section: User Commands (1)
索引
jman
BSD mandoc
索引
名称
indent
- C 言語プログラムの字下げと整形
索引
書式
[input-file [output-file
]
]
[-bad | -nbad
]
[-bap | -nbap
]
-words
[-bbb | -nbbb
]
[-bc | -nbc
]
[-bl
]
[-br
]
[-c n
]
[-cd n
]
-words
[-cdb | -ncdb
]
[-ce | -nce
]
[-ci n
]
[-cli n
]
[-d n
]
[-di n
]
-words
[-fbs | -nfbs
]
[-fc1 | -nfc1
]
[-fcb | -nfcb
]
[-i n
]
[-ip | -nip
]
[-l n
]
[-lc n
]
[-ldi n
]
[-lp | -nlp
]
[-npro
]
[-pcs | -npcs
]
[-psl | -npsl
]
[-sc | -nsc
]
-words
[-sob | -nsob
]
[-st
]
[-troff
]
[-ut | -nut
]
[-v | -nv
]
索引
解説
ユーティリティは
C
言語プログラムの整形を行います。
input-file
中の
C
プログラムをオプションに従って整形し直します。
以下で説明するオプションはファイル名の前後で指定できます。
注
input-file
のみを指定した場合、整形は「同じ場所に」行われます。
つまり、整形結果は
input-file
に書き戻され、カレントディレクトリに元の
input-file
のバックアップがコピーされます。
例えば
input-file
の名前が
`/blah/blah/file
'
だったとすると、バックアップファイルの名前は
`file.BAK
'
となります。
は
output-file
が指定されると、念のため、それが
input-file
とは異なっていることをチェックします。
の整形スタイルは以下にあげるオプションで制御します。
- -bad , nbad
-
-bad
を指定すると、宣言ブロックの後ごとに空行を 1 行入れます。
デフォルトは
-nbad
です。
- -bap , nbap
-
-bap
を指定すると、関数本体の後ごとに空行を 1 行入れます。
デフォルトは
-nbap
です。
- -bbb , nbbb
-
-bbb
を指定すると、コメントブロックの前に必ず空行を 1 行入れます。
デフォルトは
-nbbb
です。
- -bc , nbc
-
-bc
を指定すると、宣言の中のコンマの後ごとに改行を入れます。
-nbc
はこれを抑止します。
デフォルトは
-nbc
です。
- -br , bl
-
-bl
を指定すると、複合文は以下のように行分けされます。
if (...)
{
code
}
一方、デフォルトは
-br
ですが、以下のようになります。
if (...) {
code
}
- -c n
-
プログラムコードの右側に書かれたコメントの開始位置を指定します。
デフォルトでは 33 桁目です。
- -cd n
-
宣言の右側に書かれたコメントの開始位置を指定します。
デフォルトではプログラムコードの右側に書かれたコメントと同じ位置
になります。
- -cdb , ncdb
-
コメント区切りを独立の行とするかどうかを指定します。
このオプションを有効にすると、コメントは以下のようになります。
/*
* this is a comment
*/
一方、
-ncdb
では以下のようになります。
/* this is a comment */
このオプションはブロックコメントのみに影響し、コード右側のコメントには
影響しません。
デフォルトは
-cdb
です。
- -ce , nce
-
-ce
は `else' を直前の `}' につけて ``} else'' のように出力します。
デフォルトは
-ce
です。
- -ci n
-
継続行の字下げを
n
で指定します。
継続行は、その文の最初の行の先頭から指定した字数だけ字下げされます。
-lp
が有効でなければ、または、
継続行の字下げがメインの字下げのちょうど半分でないならば、
かっこで括られた式は、
入れ子になっていることを示すために余分に字下げされます。
-ci
のデフォルトは
-i
と同じ値です。
- -cli n
-
case ラベル字下げ位置を
switch
文の字下げ位置から
n
個目のタブストップにします。
-cli0.5
なら、タブストップの半分になります。
デフォルトは
-cli0
です。
- -d n
-
プログラムコードの右側に書かれたものでない独立したコメントに関して、
その場所を制御します。
例えば
-d1
で、コードの字下げより 1 段左側にします。
デフォルトの
-d0
を指定すると、プログラムコードの字下げに合わせます。
下記「コメントの
字下げ」の節を参照して下さい。
- -di n
-
大域変数名と全ての構造体 / 共用体のメンバ名の、
それらの型宣言の開始位置からの字下げを文字数で指定します。
デフォルトは
-di16
です。
- -dj , ndj
-
-dj
は宣言を左揃えにします。
-ndj
は、プログラムコードと同じ字下げを行います。
デフォルトは
-ndj
です。
- -ei , nei
-
else-if
に対し特別な処理をするよう指定します(しません)。
これを指定すると、
else
に続く
if
は、最初の
if
文と同じだけ字下げされます。
-ei
がデフォルトです。
- -fbs , nfbs
-
関数宣言と開き中括弧を 2 行に分けるよう指定します(しません)。
デフォルトは、
-fbs
です。
- -fc1 , nfc1
-
-fc1
で、コメントが 1 桁目から始まっている場合も整形します(しません)。
プログラマが意図的にそうしている場合がありますから、
そのような場合に、
-nfc1
を使うべきではありません。
デフォルトは
-fc1
です。
- -fcb , nfcb
-
ブロックコメント (`/*\n' で開始するコメント) の整形を
有効とするかどうかを指定します。
プログラマは、
ブロックコメントをそれ程は注意深く手動整形していないことが多いですが、
再整形によって改行位置だけを変えるということは望ましくないことがあります。
このような場合には
-nfcb
を使います。
ブロックコメントはボックスコメントのように扱われます。
デフォルトは
-fcb
です。
- -i n
-
1 段の字下げ量を指定します。デフォルトは 8 文字です。
- -ip , nip
-
パラメータ宣言を左マージンからさらに字下げします(しません)。
デフォルトは
-ip
です。
- -l n
-
出力行の最大幅を指定します。デフォルトは 78 文字です。
- -ldi n
-
局所変数の、その型宣言の開始位置からの字下げを文字数で指定します。
局所変数名のデフォルトは、大域変数の値と同じだけの字下げです。
- -lp , nlp
-
継続行において括弧内のプログラムコードの位置を揃えます。
左括弧がその行で閉じていない時、継続行を前の行の
左括弧の 1 文字後ろから始まるようにします。
例えば、
-nlp
が指定されると継続行は以下のようになります。
p1 = first_procedure(second_procedure(p2, p3),
third_procedure(p4, p5));
一方、
-lp
が指定されると、プログラムコードは以下のように幾分見やすくなります
(デフォルトで指定されます)。
p1 = first_procedure(second_procedure(p2, p3),
third_procedure(p4, p5));
2行余分に改行された場合には、下のようになります。
p1 = first_procedure(second_procedure(p2,
p3),
third_procedure(p4,
p5));
- -npro
-
字下げのプロファイル
`./.indent.pro
'
と
`~/.indent.pro
'
を使わないようになります。
- -pcs , npcs
-
-pcs
が指定されると、全ての関数呼出しの関数名と括弧の間に空白を 1 つ入れます。
デフォルトは、
-npcs
です。
- -psl , npsl
-
-psl
が指定されると、関数定義における関数の名前を 1 桁目から始めます。
つまり、その関数の型名は前の行に置かれることになります。
デフォルトは、
-psl
です。
- -sc , nsc
-
全てのコメントの左端に、アスタリスク(`*') を置きます(置きません)。
デフォルトは
-sc
です。
- -sob , nsob
-
-sob
が指定されると、不要な空白行を取除きます。
宣言部の後ろの余分な空白行を取り除くのに便利です。
デフォルトは、
-nsob
です。
- -st
-
が標準入力に対して処理を行い、結果を標準出力に出力するようします。
- -T typename
-
typename
を型名として扱うように追加します。
-T
は幾つ使ってもかまわないので、複数の型名を指定できます。
プログラム中で
typedef
によって定義された型名は必ず指定する必要があります。
- 多少の指定を
忘れたところで実害は全くありませんが、プログラムは意図した程
きれいには整形されないでしょう。
全部の型名を指定しなければならないのは大変なように思えますが、
実際にはこれは C 言語のもつ問題が表面化したに過ぎません。
つまり、
typedef
は、言語の構文解釈を変えてしまうので、
は
typedef
で定義された型名を全て見付けることができないわけです。
- -troff
-
troff(1)
で処理できるフォーマットで出力します。
vgrind(1)
と全く同じ考え方に基づいて、出力をきれいにしようとします。
出力ファイルが指定されていないと、出力先として入力ファイルではなく
標準出力が使われます。
- -ut , nut
-
出力におけてタブ文字を使用するよう指定します(しません)。
タブは 8 で割り切れるカラムで整列されると想定します。
デフォルトは、
-ut
です。
- -v , nv
-
-v
で `verbose' モードになります。
-nv
は `verbose' モードを抑止します。
`verbose' モードでは、入力中の 1 行が複数行に分割された場合には、
その旨を表示し、終了時には出力サイズについての情報を
付け加えるようになります。
デフォルトは
-nv
です。
ログインディレクトリかカレントディレクトリの一方、あるいはその両方に
.indent.pro
というプロファイルを作って、その中にオプションを書いておくことにより、
あなたの好みの設定を
のデフォルトとすることができます。
プロファイルは、ログインディレクトリ、カレントディレクトリの順で
読み込まれるため、カレントディレクトリに `.indent.pro'があると、
そちらの指定の方が優先されます。
の起動時にプロファイルが存在していると、それを読み込んでデフォルトと
して使用します。
ただし、コマンド行でオプションを指定すると、それは常に
プロファイル中のオプションよりも優先されます。
プロファイルを書く際には、各オプションを空白かタブもしくは改行で
区切ってやらなくてはなりません。
コメント
`ボックス
'
コメント
の処理について説明します。
ユーティリティは、
コメント開始の直後にマイナスやアスタリスクが続いている(つまり
`/*-' もしくは`/**' となっている)場合、そのコメントをアスタリスクで
周囲を囲まれたものとみなします。
このようなコメントに対しては、コメントの最初の行に施される
字下げ位置に、続く各行を揃える他は、処理を行いません。
つぎに、
連続したテキスト
としての処理について説明します。
上にあげた以外のコメントは、連続したテキストとして扱います。
ユーティリティは、
1 行にできるだけ多くの単語(空白やタブもしくは改行で区切られた文字列)
を詰め込もうとします。また、空白行により段落が分けられます。
コメントの字下げ
プログラムコードの右側のコメントは、コマンド行のオプション
-c n
で指定された「コメント開始位置」から始まるようになります。
その他のコメントは、コマンド行のオプション
-d n
が指定されると、プログラムコードがおかれている位置よりも
n
段少なく字下げされます。
1 行の内でプログラムコードが指定されたコメント開始位置を
超えて続いていた場合には、さらにその右へとコメントを続けますが、
極端に行が長かった場合には、自動的に右マージンが広くとられる
ことがあります。
マクロ行
一般に
はプリプロセッサのマクロ行をそのまま出力します。
唯一の例外はその行の右側にコメントが書かれている時で、
そのコメントを整形します。
ただし、
マクロの展開の結果プログラムに埋込まれるコメントは処理しません。
また、
は条件付きコンパイルのマクロ
(#ifdef...#endif
)
を認識し、それによってもたらされる構文上の異常を正しく補おうとします。
C 言語の構文
ユーティリティは、
C 言語の構文をかなり理解しますが、「手ぬるい」構文解析しか行いません。
不完全だったり正しくない構文も、ごく普通のものなら
なんとか処理しようとします。
とくにあげると、以下のようなマクロも適当に処理されます。
#define forever for(;;)
索引
環境変数
ユーティリティは環境変数として、
HOME
を使用します。
索引
関連ファイル
- ./.indent.pro
-
デフォルトの設定を記述したプロファイルです。
- ~/.indent.pro
-
デフォルトの設定を記述したプロファイルです。
索引
歴史
コマンドは
BSD 4.2
で導入されました。
索引
バグ
ユーティリティは
ls(1)
以上に多くのオプションを持っています。
よくある間違いは、ディレクトリにある全ての
C
プログラムを整形しようとして
indent *.c
と入力してしまうことです。
おそらく、これはバグであって仕様と言うべきではないでしょう。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- コメント
-
- コメントの字下げ
-
- マクロ行
-
- C 言語の構文
-
- 環境変数
-
- 関連ファイル
-
- 歴史
-
- バグ
-
Time: 07:06:09 GMT, January 12, 2009