マニュアルページ 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
と入力してしまい、失敗をしてしまうことがあります。