スポンサーリンク

INDENT(1) FreeBSD 一般コマンドマニュアル INDENT(1)

名称

indent − C 言語プログラムの字下げと整形

書式

indent [input-file [output-file]] [−bad | −nbad] [−bap | −nbap] [−bbb | −nbbb] [−bc | −nbc] [−bl] [−br] [−cn] [−cdn] [−cdb | −ncdb] [−ce | −nce] [−cin] [−clin] [−dn] [−din] [−fbs | −nfbs] [−fc1 | −nfc1] [−fcb | −nfcb] [−in] [−ip | −nip] [−ln] [−lcn] [−ldin] [−lp | −nlp] [−npro] [−pcs | −npcs] [−psl | −npsl] [−sc | −nsc] [−sob | −nsob] [−st] [−troff] [−ut | −nut] [−v | −nv]

解説

indent ユーティリティは C 言語プログラムの整形を行います。 input-file 中 の C プログラムをオプションに従って整形し直します。以下で説明するオプショ ンはファイル名の前後で指定できます。

: input-file のみを指定した場合、整形は「同じ場所に」行われます。つま り、整形結果は input-file に書き戻され、カレントディレクトリに元の input-file のバックアップがコピーされます。例えば input-file の名前が ‘/blah/blah/file’ だったとすると、バックアップファイルの名前は ‘file.BAK’ となります。

indentoutput-file が指定されると、念のため、それが input-file とは異 なっていることをチェックします。

indent の整形スタイルは以下にあげるオプションで制御します。

       −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
      }
       −cn

プログラムコードの右側に書かれたコメントの開始位置を指定 します。デフォルトでは 33 桁目です。

−cdn
宣言の右側に書かれたコメントの開始位置を指定します。デ フォルトではプログラムコードの右側に書かれたコメントと同 じ位置になります。

−cdb, −ncdb
コメント区切りを独立の行とするかどうかを指定します。この オプションを有効にすると、コメントは以下のようになりま す。

/*

* this is a comment

*/

一方、 −ncdb では以下のようになります。

              /* this is a comment */

このオプションはブロックコメントのみに影響し、コード右側 のコメントには影響しません。デフォルトは −cdb です。

       −ce, −nce

−ce は ‘else’ を直前の ‘}’ につけて ‘‘} else’’ のように出 力します。デフォルトは −ce です。

−cin
継続行の字下げを n で指定します。継続行は、その文の最初の 行の先頭から指定した字数だけ字下げされます。 −lp が有効で なければ、または、継続行の字下げがメインの字下げのちょう ど半分でないならば、かっこで括られた式は、入れ子になって いることを示すために余分に字下げされます。 −ci のデフォル トは −i と同じ値です。

−clin
case ラベル字下げ位置を switch 文の字下げ位置から n 個目 のタブストップにします。 −cli0.5 なら、タブストップの半分 になります。デフォルトは −cli0 です。

−dn
プログラムコードの右側に書かれたものでない独立したコメン トに関して、その場所を制御します。例えば −d1 で、コードの 字下げより 1 段左側にします。デフォルトの −d0 を指定する と、プログラムコードの字下げに合わせます。下記「コメント の字下げ」の節を参照して下さい。

−din
大域変数名と全ての構造体 / 共用体のメンバ名の、それらの型 宣言の開始位置からの字下げを文字数で指定します。デフォル トは −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 です。

−in
1 段の字下げ量を指定します。デフォルトは 8 文字です。

−ip, −nip
パラメータ宣言を左マージンからさらに字下げします(しませ ん)。デフォルトは −ip です。

−ln
出力行の最大幅を指定します。デフォルトは 78 文字です。

−ldin
局所変数の、その型宣言の開始位置からの字下げを文字数で指 定します。局所変数名のデフォルトは、大域変数の値と同じだ けの字下げです。

−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
indent
が標準入力に対して処理を行い、結果を標準出力に出力 するようします。

−Ttypename
typename
を型名として扱うように追加します。 −T は幾つ使っ てもかまわないので、複数の型名を指定できます。プログラム 中で typedef によって定義された型名は必ず指定する必要があ ります。 − 多少の指定を忘れたところで実害は全くありません が、プログラムは意図した程きれいには整形されないでしょ う。全部の型名を指定しなければならないのは大変なように思 えますが、実際にはこれは C 言語のもつ問題が表面化したに過 ぎません。つまり、 typedef は、言語の構文解釈を変えてしま うので、 indenttypedef で定義された型名を全て見付ける ことができないわけです。

−troff
troff(1) で処理できるフォーマットで出力します。 vgrind(1) と全く同じ考え方に基づいて、出力をきれいにしようとしま す。出力ファイルが指定されていないと、出力先として入力 ファイルではなく標準出力が使われます。

−ut, −nut
出力におけてタブ文字を使用するよう指定します(しません)。 タブは 8 で割り切れるカラムで整列されると想定します。デ フォルトは、 −ut です。

−v, −nv
−v
で ‘verbose’ モードになります。 −nv は ‘verbose’ モー ドを抑止します。 ‘verbose’ モードでは、入力中の 1 行が複 数行に分割された場合には、その旨を表示し、終了時には出力 サイズについての情報を付け加えるようになります。デフォル トは −nv です。

ログインディレクトリかカレントディレクトリの一方、あるいはその両方に .indent.pro というプロファイルを作って、その中にオプションを書いておくこ とにより、あなたの好みの設定を indent のデフォルトとすることができます。 プロファイルは、ログインディレクトリ、カレントディレクトリの順で読み込ま れるため、カレントディレクトリに ‘.indent.pro’があると、そちらの指定の方 が優先されます。 indent の起動時にプロファイルが存在していると、それを読 み込んでデフォルトとして使用します。ただし、コマンド行でオプションを指定 すると、それは常にプロファイル中のオプションよりも優先されます。プロファ イルを書く際には、各オプションを空白かタブもしくは改行で区切ってやらなく てはなりません。

コメント
‘ボックス’ コメントの処理について説明します。 indent ユーティリティは、コ メント開始の直後にマイナスやアスタリスクが続いている(つまり ‘/*−’ もしく は‘/**’ となっている)場合、そのコメントをアスタリスクで周囲を囲まれたもの とみなします。このようなコメントに対しては、コメントの最初の行に施される 字下げ位置に、続く各行を揃える他は、処理を行いません。

つぎに、 連続したテキストとしての処理について説明します。上にあげた以外の コメントは、連続したテキストとして扱います。 indent ユーティリティは、 1 行にできるだけ多くの単語(空白やタブもしくは改行で区切られた文字列) を詰め 込もうとします。また、空白行により段落が分けられます。

コメントの字下げ
プログラムコードの右側のコメントは、コマンド行のオプション −cn で指定され た「コメント開始位置」から始まるようになります。その他のコメントは、コマ ンド行のオプション −dn が指定されると、プログラムコードがおかれている位置 よりも n 段少なく字下げされます。 1 行の内でプログラムコードが指定された コメント開始位置を超えて続いていた場合には、さらにその右へとコメントを続 けますが、極端に行が長かった場合には、自動的に右マージンが広くとられるこ とがあります。

マクロ行
一般に indent はプリプロセッサのマクロ行をそのまま出力します。唯一の例外 はその行の右側にコメントが書かれている時で、そのコメントを整形します。た だし、マクロの展開の結果プログラムに埋込まれるコメントは処理しません。ま た、 indent は条件付きコンパイルのマクロ (#ifdef...#endif) を認識し、それ によってもたらされる構文上の異常を正しく補おうとします。

C 言語の構文
indent
ユーティリティは、 C 言語の構文をかなり理解しますが、「手ぬるい」 構文解析しか行いません。不完全だったり正しくない構文も、ごく普通のものな らなんとか処理しようとします。とくにあげると、以下のようなマクロも適当に 処理されます。

#define forever for(;;)

環境変数

indent ユーティリティは環境変数として、 HOME を使用します。

関連ファイル

       ./.indent.pro

デフォルトの設定を記述したプロファイルです。
~/.indent.pro
デフォルトの設定を記述したプロファイルです。

歴史

indent コマンドは 4.2BSD で導入されました。

バグ

indent ユーティリティは ls(1) 以上に多くのオプションを持っています。

よくある間違いは、ディレクトリにある全ての C プログラムを整形しようとして

indent *.c

と入力してしまうことです。おそらく、これはバグであって仕様と言うべきでは ないでしょう。

FreeBSD 10.0 June 29, 2004 FreeBSD 10.0

スポンサーリンク