# マニュアルページ indent.1

## 名前

         indent - C プログラムのソースファイルのインデントと書式化

## 形式

         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 ]

## 機能説明

         indent は、C プログラムのフォーマッタです。 入 力 ファ イ ル
         input-file に含まれる C プログラムをオプションに従って書式化
         し直します。指定できるオプションについては後述します。 オ プ
         ションは、ファイル名の前でも後ろでも指定できます。

         注意 : input-file だけを指定すると、書式化された結果がファイ
         ル input-file に書き戻され、 input-file のバックアップがカレ
         ント・ディレクトリに書き込まれます。 input-file  の 名 前 が
         /blah/blah/file  の と き、 バッ ク アップ・ファイルの名前は
         file.BAK となります。

         output-file を指定すると、そのファイルが input-file と異なる
         かどうかがチェックされます。

## オプション

         次に示すオプションは、 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 (...)
                        {
                                       コード
                        }

                   -br (デフォルト) を指定すると、複合文は次のよう に
                   なります。
                        if (...) {
                                       コード
                        }

         -bs,-nbs
              -bs を指定すると、 sizeof の後ろにブランクが挿入され ま
              す。  sizeof  を手続き呼び出しのように指定するか ( -nbs
              を指定した場合 : デフォルト)、それとも、 sizeof は演 算
              子 であるため、他の演算子と同じようにその後ろにブランク
              を置くかは、プログラマによって意見が分かれると こ ろ で
              す。

         -cn  コードに関するコメントを開始するカラムを n に設定 し ま
              す。
              デフォルト値: -c33

         -cdn 宣言に関するコメントを開始するカラムを n に設定します。
              デ フォルトでは、コードに関するコメントと同じカラムから
              開始されます。

         -cdb,-ncdb
              を指定すると、コメントの区切り文字がブランク行に置か れ
              ます。たとえば、
              /* これはコメントです */
              は、次のようになります。

              /*
              *これはコメントです
              */
              -ncdb を指定すると、この処理は行われません。

              これらのオプションはブロックコメントだけを操作し、 コー
              ドの右側にあるコメントには影響を与えません。
              デフォルト値:  -cdb

         -ce,-nce
              を指定すると、 else とその直前にある `}' との間の空白が
              取 り除かれます。 -nce を指定すると、この処理は行われま
              せん。
              デフォルト値:  -ce

         -cin 継続行のインデントを n カラムに設定します。各継続行が同
              じ文の先頭行の先頭カラムから n カラムだけインデントされ
              ます。 -lp が有効なとき、入れ子を示すために括弧で囲まれ
              た式にはインデントが追加されます。 n を指定しないと、イ
              ンデントのカラム数が -i と同じ値に設定されます。

         -clin
              case のラベルを、それを含んでいる switch 文から、タブ n
              個 分インデントします。 -cli0.5 とすると、case のラベル
              はタブの半分だけインデントされます。
              デフォルト値:  -cli0

         -dn  コードの右側にあるコメント以外のコメントの配置を制御 し
              ます。デフォルトの -d1 では、各コメントがコードの先頭か
              ら 1 回インデントした位置に配置されます。 -d0 を指定 す
              る と、各コメントはコードと同じ位置に配置されます。後述
              の「コメントのインデント」を参照してください。

         -din 宣言のキーワードとそれに続く識別子の間を何文字あける か
              を指定します。
              デフォルト値:  -di16

         -dj,-ndj
              -dj を指定すると、宣言が左揃えされます。 -ndj を指定 す
              ると、宣言はコードと同じ位置にインデントされます。
              デフォルト値:  -ndj

         -ei,-nei
              -ei を指定すると、 else に続く if は、その前の if 文 と
              同じ位置にインデントされます。 -nei を指定すると、 else
              に続く if は、その前の if 文より 1 レベル深くインデント
              されます。
              デフォルト値:  -ei

         -eei,-neei
              -eei を指定すると、 if() および while() の式の部分の 継
              続行が、同じ式の先頭行よりさらに 1 レベル深く (つまり 2
              レベル) インデントされます。これは、継続が行わ れ た 式
              と、 if() または while() に続く文とを間違えないようにす
              るためのものです。
              デフォルト値:  -neei

         -fc1,-nfc1
              -fc1 を指定すると、カラム 1 から始まるコメントの書式 化
              が行われます。 -nfc1 を指定すると、そのような書式化は行
              われません。先頭の `/' がカラム 1 にあるコメントは、 多
              く の場合、プログラマが 1 つ 1 つ手作業で書式化したもの
              です。このような場合は、 -nfc1 を使用してください。
              デフォルト値:  -fc1

         -in  1 つのインデント・レベルのスペースの数を指定します。 デ
              フォルトでは、1 つのタブと等しくなります。

         -ip,-nip
              -ip を指定すると、パラメタの宣言が左マージンからイン デ
              ン トされます。 -nip を指定すると、この処理は行われませ
              ん。
              デフォルト値:  -ip

         -ln  後ろのコメントを含む出力行の最大の長さを n カラムに設定
              します。
              デフォルト値:  -l78

         -lcn ブロック・コメントの行の長さを n カラムに設定します。デ
              フォ ルトでは、 -l で指定された通常の行の長さと等しくな
              ります。

         -lp,-nlp
              -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));

              いくつかの復帰改行 (NEWLINE) 文字を挿入すると、次のよう
              になります。
                   p1 = first_procedure(second_procedure(p2,
                                                      p3),
                                          third_procedure(p4,
                                                    p5));

              この例は、 -lp によって出力されたものです。

         -npro
              プロファイル・ファイルの ./.indent.pro と ~/.indent.pro
              を無視します。

         -pcs , -npcs
              -pcs を指定すると、ソースコード内のすべての手続き呼び出
              しと手続きの宣言において、手続き名と '(' の間にスペース
              が挿入されます。
              デフォルト値:  -npcs

         -psl , -npsl
              -psl を指定すると、定義されている手続きの名前がカラム 1
              に 置かれ、その型があれば、前の行に置かれたままとなりま
              す。 -npsl を指定すると、この処理は行われません。
              デフォルト値:  -psl

         -sc,-nsc
              -sc を指定すると、すべてのコメントの左端にアスタリス ク
              (`*')  が置かれます。 -nsc を指定すると、この処理は行わ
              れません。
              デフォルト値:  -sc

         -sob,-nsob
              -sob を指定すると、インデント時に省略可能なブランク行が
              削 除されます。このオプションを使用すれば、宣言の後ろの
              ブランク行を排除できます。デフォルト (-nsob) では、この
              処理は行われません。

         -st  indent は、処理対象のデータを標準入力から読み取り、結果
              を標準出力に書き込みます。

         -T typename
              型のキーワードのリストに名前 typename を追加します。 -T
              は 複 数 回使用することができ、指定した名前が累積されま
              す。 typedef で定義した、プログラム内のすべての型名を指
              定 する必要があります。いくつかの型名を指定し忘れてもプ
              ログラムが壊されることはありませんが、結果として、書 式
              化 が適切でない部分が残ります。そのような部分は書式とし
              て不十分なだけでなく、実際にプログラムで起こるかもし れ
              ない問題の兆候であることがあります。 typedef により言語
              の構文が変更されるため、 indent はすべての typedef を検
              出できません。

         -troff
              indent は、 troff で処理するための書式化を行います。 こ
              れ により、 vgrind と同様の結果が得られます。出力ファイ
              ルが指定されていないと、結果は標準出力に出力され、入 力
              ファイルは処理されません。通常、 troff によって処理した
              出力を得るには、次のコマンドを使用します。

                   indent -troff program.c | troff -mindent

         -v,-nv
              -v は「詳細情報」モードをオン、 -nv はオフにします。 詳
              細情報モードでは、1 行を 2 行以上に分割した場合にそのこ
              とが報告され、コンパイル時にサイズの統計情報が示され ま
              す。
              デフォルト値:  -nv

## 使用法

         ログイン・ディレクトリまたは現作業ディレクトリに .indent.pro
         というファイルを作成し、その中で使用したいオプションを指定す
         れば、 indent のデフォルトを決定する独自の「プロファイル」を
         設 定できます。現作業ディレクトリの .indent.pro は、ログイン
         ディレクトリの中にあるファイルより優先します。 indent の実行
         時 に プ ロ ファイル・ファイルが存在すると、そのプロファイル
         ・ファイルが読み込まれ、それに従ってプログラムのデフォルトが
         設定されます。ただし、コマンド行のオプションはプロファイル内
         のオプションよりも常に優先します。各オプションは、スペース、
         タブ、復帰改行文字で区切ってください。

      コメント
         枠付き               indent は、コメントの開始を示す文字列の
                        直 後 が ダッシュまたはアスタリスク (すなわち
                        `/*-'または`/**') の場合、そのコメントがア ス
                        タ リ ス クの枠によって囲まれていると想定しま
                        す。そのようなコメントを構成する各行は、変 更
                        し ないでそのままにします。ただし、コメントの
                        先頭行のインデント位置が変更された場合は、 そ
                        の 位 置 に合わせてインデントの位置を調整しま
                        す。

         一般テキスト               上記以外のコメントはすべて一般 テ
                        キ ストとして扱います。 indent は各行にできる
                        だけ多くのワードを (スペース、タブ、復帰改 行
                        文 字で区切って) 配置します。ブランク行が現れ
                        ると、段落の終わりと見なします。

      コメントのインデント
         コメントと同じ行にコードがあると、そのコメントは「コメントカ
         ラム」(コマンド行パラメタ -cn によって設定されるもの) から開
         始します。それ以外の行では、現在のコードのインデント位置より
         も  n レベル (コマンド行パラメタ -dn によって指定されるもの)
         少ない位置からコメントを開始します。コードがコメントカラムの
         位置を超えた場合、コメントはその位置よりも右側から開始され、
         極端な場合、コメントを同じ行に納めるために右マージンが自動的
         に拡張されることがあります。

      前処理行
         通常、 indent は前処理文の右側にあるコメントの位置を揃えるだ
         けで、途中に埋め込まれているコメントは変更しません。条件付き
         コンパイル (#ifdef...#endif) を認識し、構文的に特異な部分 が
         あると、それを補正しようとします。

      C の構文
         indent は、C の構文の大部分を識別しますが、その解析はかな り
         甘いものです。構文が不完全であったり、正しくなかったりした場
         合、それが通常のものであれば対処しようとします。特に、次のよ
         うなマクロは適切に処理することができます。

              #define forever for(;;)

      /*INDENT OFF*/ /*INDENT ON*/
         この 2 つのコメントの間のテキストはすべてそのままにしま す。
         したがって、ソースコードがこれらのコメントの間にあると、書式
         の変更は行われません。

## ファイル

         ./.indent.pro       プロファイルファイル
         ~/.indent.pro       プロファイルファイル

## 関連項目

         troff(1)

## 使用上の留意点

         よくある誤りの 1 つに、ディレクトリ内のすべての C プログラム
         に対して indent を実行しようとして、シェルで
              indent *.c
         と入力してしまい、失敗をしてしまうことがあります。