Provided by: manpages-ja_0.5.0.0.20221215+dfsg-1_all
名前
indent - 空白の挿入や削除を行い、C 言語プログラムの見栄えを変える。
書式
indent [options] [input-files] indent [options] [single-input-file] [-o output-file] indent --version
説明
この man ページはファイル indent.texinfo から生成した。 これは indent バージョン 2.2.9 用 の「The indent Manual」の 2.2.9 版 (2002 年 11 月 10 日版) である。 indent プログラムを使うとコードを読みやすくすることができる。 また、C 言語のコード記述を、 あるスタイルから別のスタイルに変換することもできる。 indent はたくさんある C 言語の文法を理解するが、 文法が不完全な部分や誤っている部分もでき るだけ処理しようとする。 バージョン 1.2 以降では、GNU スタイルのインデントがデフォルトである。
オプション
-bad, --blank-lines-after-declarations 宣言の後に必ず空行を置く。 「空行」セクションを参照すること。 -bap, --blank-lines-after-procedures 手続き本体の後に必ず空行を置く。 「空行」セクションを参照すること。 -bbb, --blank-lines-before-block-comments ブロックコメントの前に必ず空行を置く。 「空行」セクションを参照すること。 -bbo, --break-before-boolean-operator 長い行をブーリアン演算子の前で折り返す。 「長い行の折り返し」セクションを参照すること。 -bc, --blank-lines-after-commas 宣言中のコンマの後に必ず改行を置く。 「宣言」セクションを参照すること。 -bl, --braces-after-if-line ブレースは if 等の次の行に置く。 「文」セクションを参照すること。 -blin, --brace-indentn ブレースを n 個のスペースでインデント付けする。 「文」セクションを参照すること。 -bls, --braces-after-struct-decl-line ブレースは struct 宣言行の次の行に置く。 「宣言」セクションを参照すること。 -br, --braces-on-if-line ブレースは if 等がある行に置く。 「文」セクションを参照すること。 -brs, --braces-on-struct-decl-line ブレースは struct 宣言行がある行に置く。 「宣言」セクションを参照すること。 -bs, --Bill-Shannon, --blank-before-sizeof sizeof とその引き数の間に空白を置く。 「文」セクションを参照すること。 -cn, --comment-indentationn コメントをコードの右のカラム n に置く。 「コメント」セクションを参照すること。 -cbin, --case-brace-indentationn case ラベルの後に、ブレースを n 個の空白でインデント付けする。 「文」セクションを参照すること。 -cdn, --declaration-comment-columnn コメントを宣言の右のカラム n に置く。 「コメント」セクションを参照すること。 -cdb, --comment-delimiters-on-blank-lines 空行にコメント区切り文字を置く。 「コメント」セクションを参照すること。 -cdw, --cuddle-do-while do {} while; の while とその前の `}´ を並べる。 「コメント」セクションを参照すること。 -ce, --cuddle-else else とその前の `}´ を並べる。 「コメント」セクションを参照すること。 -cin, --continuation-indentationn 前の行から継続している場合には、n 個の空白でインデントする。 「文」セクションを参照すること。 -clin, --case-indentationn case ラベルを N 個の空白でインデントする。 「文」セクションを参照すること。 -cpn, --else-endif-columnn #else 文と #endif 文の右のカラム n にコメントを置く。 「コメント」セクションを参照すること。 -cs, --space-after-cast キャスト演算子の後に空白を置く。 「文」セクションを参照すること。 -dn, --line-comments-indentationn コードの右でないコメントは空白 n 個でインデントするように設定する。 「コメント」セクションを参照すること。 -bfda, --break-function-decl-args (関数) 宣言の全ての引き数の後で折り返す。 「宣言」セクションを参照すること。 -bfde, --break-function-decl-args (関数) 宣言の全ての引き数の前で折り返す。 「宣言」セクションを参照すること。 -din, --declaration-indentationn 変数をカラム n に置く。 「宣言」セクションを参照すること。 -fc1, --format-first-column-comments 最初のカラムから始まるコメントを整形する。 「コメント」セクションを参照すること。 -fca, --format-all-comments コメントの整形を全てを無効にしない。 「コメント」セクションを参照すること。 -gnu, --gnu-style GNU コーディングスタイルを使用する。これはデフォルトの動作である。 「一般的なスタイル」セクションを参照すること。 -hnl, --honour-newlines 入力ファイルで改行が入っている位置で 長い行を折り返すようにする。 「長い行の折り返し」セクションを参照すること。 -in, --indent-leveln インデントのレベルを空白 n 個に設定する。 「インデント付け」セクションを参照すること。 -ipn, --parameter-indentationn 古い形式の関数定義のパラメータ型を空白 n 個でインデントする。 「インデント付け」セクションを参照すること。 -kr, --k-and-r-style Kernighan & Ritchie コーディングスタイルを使用する。 「一般的なスタイル」セクションを参照すること。 -ln, --line-lengthn コメントでない行の最大の長さを n に設定する。 「長い行の折り返し」セクションを参照すること。 -lcn, --comment-line-lengthn コメントを整形する最大の長さを n に設定する。 「コメント」セクションを参照すること。 -lp, --continue-at-parentheses 前の行に続く行を括弧の位置に揃える。 「インデント付け」セクションを参照すること。 -lps, --leave-preprocessor-space `#´ とプリプロセッサディレクティブの間の空白を残す。 「インデント付け」セクションを参照すること。 -nbad, --no-blank-lines-after-declarations 宣言の後に空行を置かない。 「空行」セクションを参照すること。 -nbap, --no-blank-lines-after-procedures 手続き本体の後に空行を置かない。 「空行」セクションを参照すること。 -nbbo, --break-after-boolean-operator ブーリアン演算子の前で長い行を折り返さない。 「長い行の折り返し」セクションを参照すること。 -nbc, --no-blank-lines-after-commas 宣言中のコンマの後に改行を置かない。 「宣言」セクションを参照すること。 -nbfda, --dont-break-function-decl-args 関数宣言の各引き数を別々の行に置かない。 「宣言」セクションを参照すること。 -ncdb, --no-comment-delimiters-on-blank-lines 空行にコメント区切り文字を置かない。 「コメント」セクションを参照すること。 -ncdw, --dont-cuddle-do-while do {} while; の } と while を同じ行に並べない。 「文」セクションを参照すること。 -nce, --dont-cuddle-else } と else を同じ行に並べない。 「文」セクションを参照すること。 -ncs, --no-space-after-casts キャスト演算子の後に空白を置かない。 「文」セクションを参照すること。 -nfc1, --dont-format-first-column-comments 最初のカラムから始まるコメントを通常のように整形しない。 「コメント」セクションを参照すること。 -nfca, --dont-format-comments どのようなコメントも整形しない。 「コメント」セクションを参照すること。 -nhnl, --ignore-newlines 入力ファイルで改行が入っている位置で 長い行を折り返さないようにする。 「長い行の折り返し」セクションを参照すること。 -nip, --no-parameter-indentation パラメータのインデント幅を 0 にする。 「インデント付け」セクションを参照すること。 -nlp, --dont-line-up-parentheses 括弧の位置を揃えない。 「文」セクションを参照すること。 -npcs, --no-space-after-function-call-names 関数呼び出し内部の関数の後に空白を置かない。 「文」セクションを参照すること。 -nprs, --no-space-after-parentheses ´(´ の後と ´)´ の前に空白を置かない。 「文」セクションを参照すること。 -npsl, --dont-break-procedure-type 手続きの型を名前と同じ行に置く。 「宣言」セクションを参照すること。 -nsaf, --no-space-after-for for の後に空白を置かない。 「文」セクションを参照すること。 -nsai, --no-space-after-if if の後に空白を置かない。 「文」セクションを参照すること。 -nsaw, --no-space-after-while while の後に空白を置かない。 「文」セクションを参照すること。 -nsc, --dont-star-comments `*´ 文字をコメントの左に置かない。 「コメント」セクションを参照すること。 -nsob, --leave-optional-blank-lines 余計な空行を削除しない。 「空行」セクションを参照すること。 -nss, --dont-space-special-semicolon 特定の文の後のセミコロンの前に空白を置かない。 `-ss´ を無効にする。 「文」セクションを参照すること。 -nut, --no-tabs タブではなく空白を使う。 「インデント付け」セクションを参照すること。 -nv, --no-verbosity 詳細表示モードを無効にする。 「その他のオプション」セクションを参照すること。 -orig, --original オリジナルの Berkeley コーディングスタイルを使用する。 「一般的なスタイル」セクションを参照すること。 -npro, --ignore-profile `.indent.pro´ ファイルを読み込まない。 「indent の起動」セクションを参照すること。 -pcs, --space-after-procedure-calls 呼び出される手続きの名前と `(' の間に空白を挿入する。 「文」セクションを参照すること。 -pin, --paren-indentationn 文が不完全な場合に使われる 開括弧 ´(´ ごとの追加のインデントを指定する。 「文」セク ションを参照すること。 -pmt, --preserve-mtime 出力ファイルのアクセス時刻と修正時刻を保存する。 「その他のオプション」セクションを参 照すること。 -prs, --space-after-parentheses ´(´ の後と ´)´ の前に空白を置く。 「文」セクションを参照すること。 -psl, --procnames-start-lines 手続きの型を名前と同じ行に置く。 「宣言」セクションを参照すること。 -saf, --space-after-for for の後にスペースを置く。 「文」セクションを参照すること。 -sai, --space-after-if if の後にスペースを置く。 「文」セクションを参照すること。 -saw, --space-after-while while の後にスペースを置く。 「文」セクションを参照すること。 -sbin, --struct-brace-indentationn stract, union, enum のブレースを n 個の空白でインデントする。 「文」セクションを参照すること。 -sc, --start-left-side-of-comments `*´ 文字をコメントの左に置く。 「コメント」セクションを参照すること。 -sob, --swallow-optional-blank-lines 余計な空行を取り除く。 「空行」セクションを参照すること。 -ss, --space-special-semicolon 1 行で記述した for 文と while 文において、 セミコロンの前に空白を置く。 「文」セクションを参照すること。 -st, --standard-output 標準出力に書き出す。 「indent の起動」セクションを参照すること。 -T 型名の名前を indent に指定する。 「宣言」セクションを参照すること。 -tsn, --tab-sizen タブの幅を空白 n 個に設定する。 「インデント付け」セクションを参照すること。 -ut, --use-tabs タブを使う。これがデフォルトである。 「インデント付け」セクションを参照すること。 -v, --verbose 詳細表示モードを有効にする。 「その他のオプション」セクションを参照すること。 -version indent のバージョン番号を表示する。 「その他のオプション」セクションを参照すること。
indent の起動
バージョン 1.3 からは、indent コマンドの書式は 以下のようになっている: indent [options] [input-files] indent [options] [single-input-file] [-o output-file] この書式は古いバージョンや他バージョンの indent と異なる。 最初の書式では 1 つ以上の入力ファイルを指定する。 indent は、各ファイルのバックアップコ ピーを作成してから、 オリジナルのファイルをインデント付けしたものに置き換える。 バックアッ プの作り方については、 「バックアップファイル」セクションを参照すること。 2 番目の書式では入力ファイルを 1 つだけ指定する。 この場合、または標準入力を使う場合には、 `-o´ オプションの後に出力ファイルを指定することができる。 indent に標準出力へ出力させるには `-st´ オプションを使う。 これが許されるのは、入力ファイ ルが 1 つだけの場合か、 標準入力を使う場合だけである。 入力ファイルを指定しなければ入力は標準入力から読み込まれる。 また、`-´ というファイル名が 指定された場合にも標準入力が読み込まれる。 使用例としては、以下のコマンドは いずれもプログラム `slithy_toves.c´ を読み込み、 インデン ト付けしたテキストを `slithy_toves.out´ に書き込む: indent slithy_toves.c -o slithy_toves.out indent -st slithy_toves.c > slithy_toves.out cat slithy_toves.c | indent -o slithy_toves.out indent の他のオプションのほとんどは、 プログラムをどのように整形する かを制御するためのも のである。バージョン 1.2 からは、indent は各オプ ション名として長い名前も認識する。 長いオ プションの前には `--´ か `+´ が置かれる。 [POSIX 標準と一貫性を持たせるため、現在は `+´ を `--´ に置き換えようとしているところである。] 本ドキュメントの大部分では、簡潔に表現するた めに伝統的な短い名前を 使っている。長いオプション名と短いオプション名のリストは、 「オプ ションの概要」を参照すること。 別の使用例を挙げる: indent -br test/metabolism.c -l85 これにより、プログラム `test/metabolism.c´ が `-br´ オプションと `-l85´ オプションを用いて インデント付けされ、 その出力が `test/metabolism.c´ に重ね書きされ、 元の `test/metabolism.c´ の内容は `test´ ディレクトリにバックアップファイルとして書き込まれる。 この例と同じ指定を長いオプション名を用いて行うと以下のようになる: indent --braces-on-if-line --line-length185 test/metabolism.c indent +braces-on-if-line +line-length185 test/metabolism.c indent を頻繁に同じオプションで使うならば、これらを `.indent.pro´ というファイルに書いてお くとよい。 indent は 3 つの場所でプロファイ ルファイルを探す。 最初に環境変数 INDENT_PROFILE があるかをチェック する。この環境変数がある場合、その値を使用するファイルの 名前として解釈 する。この環境変数がない場合、indent はカレントディレクトリの `.indent.pro´ を探し、もし存在すればこれを使う。 indent は最後に ホームディレクトリの `.indent.pro´ を探 し、 もし存在すればこれを使う。 この動作は従来のバージョンや別バージョンの indent と異な る。 これら は、両方のディレクトリに `.indent.pro´ ファイルがあれば、 両方とも使 用する。 `.indent.pro´ の書式は、コマンドラインに指定するのと同じく、 空白 (タブ、スペース、改行) で区切られた単なるオプションのリストである。 `.indent.pro´ のオプションは、 C または C++ のコメントで囲むことができる。 コメントで囲んだオプションは無視される。 コマンドラインオプションが処理されるのは、 `.indent.pro´ を処理した後である。 後から指定し たオプションは、前に指定した引き数を上書きする。 これには例外が 1 つある: 明示的に指定した オプションは 暗黙のオプションを必ず上書きする(「一般的なスタイル」を参照)。 `-npro´ オプ ションを指定することにより、 indent が `.indent.pro´ ファイルを読み込まないようにすること ができる。
バックアップファイル
バージョン 1.3 からは、GNU indent は GNU 形式、 すなわち GNU Emacs と同様の方法でバック アップファイルを作成する。 つまり、単純なバックアップファイルと 番号付きのバックアップファ イルをどちらも作成できる。 単純なバックアップファイルの名前は、 元のファイル名にサフィックスを追加して生成される。 こ のサフィックスのデフォルト値は、 1 文字からなる文字列 `~´ (チルダ)である。 したがっ て、`python.c´ のバックアップファイルは `python.c~´ となる。 環境変数 SIMPLE_BACKUP_SUFFIX に好きな文字列を設定することにより、 デフォルト値以外の任意 の文字列をサフィックスとして使用できる。 ファイル `momeraths.c´ の番号付きバックアップは、 `momeraths.c.~23~´ のようになる。 ここ で、23 はこのファイルのバックアップのバージョンである。 ファイル `src/momeraths.c´ のバッ クアップを作成するとき、 バックアップファイルの名前は `src/momeraths.c.~V~´ のようになる。 ここで、V はディレクトリ `src´ に現在ある 最も大きいバージョンより 1 大きい数字である。 環 境変数 VERSION_WIDTH は、 必要に応じて左側に 0 を追加することにより、数字の桁数を制御す る。 例えばこの変数を "2" に設定すると、 バックアップファイルの名前は `momeraths.c.~04~´ のようになる。 どちらの方法でバックアップファイルを作るかは、 環境変数 VERSION_CONTROL で制御する。 この 文字列が `simple´ ならば、単純なバックアップだけが作成される。 この値が `numbered´ なら ば、番号付きバックアップが作成される。 この値が `numbered-existing´ ならば、 インデント付 けするファイルの番号付きのバックアップが既にある場合に、 番号付きバックアップが作成され る。 それ以外の場合には、単純なバックアップが作成される。 VERSION_CONTROL が設定されていな ければ、 indent は `numbered-existing´ が指定されているものとして動作する。 別バージョンの indent は、 サフィックス `.BAK´ を使ってバックアップファイルの名前を生成す る。 この動作は、SIMPLE_BACKUP_SUFFIX に `.BAK´ を 設定することによりエミュレートすること ができる。 別バージョンの indent は、現在の GNU indent が行うように ソースファイルがあるディレクトリ にバックアップを作成するのではなく、 カレントディレクトリにバックアップを作成する点にも注 意すること。
一般的なスタイル
C 言語には一般的なスタイルがいくつかある。 例えば、GNU スタイル、Kernighan & Ritchie スタ イル、 オリジナルの Berkeley スタイル等である。 スタイルはバックグラウンドオプション 1 つ を使って選択することができる。 このオプションは、他のオプション全ての値を指定する。 ただ し、明示的に指定したオプションは、 暗黙的に指定されたオプションよりも必ず優先される。 バージョン 1.2 からは、GNU indent のデフォルトのスタイルは GNU スタイルである。 したがっ て、このフォーマットで出力するために `-gnu´ オプションを指定する必要はなくなった。 ただ し、このオプションを指定してもエラーにはならない。 GNU スタイルに対応するオプション設定は 以下である: -nbad -bap -nbc -bbo -bl -bli2 -bls -ncdb -nce -cp1 -cs -di2 -ndj -nfc1 -nfca -hnl -i2 -ip5 -lp -pcs -nprs -psl -saf -sai -saw -nsc -nsob GNU コーディングスタイルは GNU プロジェクトで推奨されている。 これは GNU Emacs の C モード が適用しようとするスタイルであり、 GNU Emacs の C で記述された部分で使われているスタイルで ある。 (GNU プロジェクトのためにプログラムを書くことに興味がある方は、 「GNU コーディング 規約 (The GNU Coding Standards)」を入手されたい。 この文書では、メモリの使い方や整数のサイ ズ等、 セマンティックや移植性についても説明されている。) Kernighan & Ritchie スタイルは有名な書籍 「プログラミング言語 C (The C Programming Language)」で使われている。 これは `-kr´ オプションで有効となる。 Kernighan & Ritchie スタ イルは、以下のオプションの組合せと同等である: -nbad -bap -bbo -nbc -br -brs -c33 -cd33 -ncdb -ce -ci4 -cli0 -cp33 -cs -d0 -di1 -nfc1 -nfca -hnl -i4 -ip0 -l75 -lp -npcs -nprs -npsl -saf -sai -saw -nsc -nsob -nss Kernighan & Ritchie スタイルでは、コードがある行の右の部分にコメントが 入れられることはな い (コードの右に空白を 1 つだけ入れることもない)。 したがって、このスタイルのカラム数 33 というのは indent が勝手に決めたものである: オリジナルの Berkeley 版 indent のスタイルは、 `-orig´ (または長いオプション名 `--original´)を指定すれば得られる。 このスタイルは、以下の設定と同じ意味である: -nbad -nbap -bbo -bc -br -brs -c33 -cd33 -cdb -ce -ci4 -cli0 -cp33 -di16 -fc1 -fca -hnl -i4 -ip4 -l75 -lp -npcs -nprs -psl -saf -sai -saw -sc -nsob -nss -ts8
空行
各種プログラミングスタイルごとに、空白は異なる場所に置かれる。 indentには、特定の場所に空 白行を挿入・削除するための オプションがたくさんある。 `-bad´ オプションを指定すると、 indent は宣言ブロック全ての後に必ず空行を置く。 `-nbad´ オ プションを指定すると、このような空白行は置かれない。 `-bap´ オプションを指定すると、手続き本体全ての後に必ず空行が置かれる。 `-nbap´ オプション を指定すると、このような空行は置かれない。 `-bbb´ オプションを指定すると、 箱形コメント全ての前に必ず空行が置かれる (箱形コメントにつ いては「コメント」セクションを参照すること)。 `-nbbb´ オプションを指定すると、このような空 行は置かれない。 `-sob´ を指定すると、indent は省略できる空行を飲み込んでしまう (つまり、入力行に含まれる省 略できる空行が出力から全て削除される)。 `-nsob´ を指定すると、 入力行に含まれる空行は出力 ファイルにも全てコピーされる。
--blank-lines-after-declarations
`-bad´ オプションを指定すると、宣言ブロックの後に必ず空行が置かれる。 `-nbad´ オプションを 指定すると、このような空行は追加されない。 例えば、以下の入力を与えると char *foo; char *bar; /* このコメントは宣言のブロックを分けている */ int baz; indent -bad の出力は以下のようになる。 char *foo; char *bar; /* このコメントは宣言のブロックを分けている */ int baz; また、indent -nbad の出力は以下のようになる。 char *foo; char *bar; /* このコメントは宣言のブロックを分けている */ int baz;
--blank-lines-after-procedures
`-bap´ オプションを指定すると、それぞれの宣言本体の後に必ず空行が置かれる。 例えば、以下の入力を与えると int foo () { puts("Hi"); } /* この手続き bar には意味はない */ char * bar () { puts("Hello"); } indent -bap の出力は以下となる。 int foo () { puts ("Hi"); } /* この手続き bar には意味はない */ char * bar () { puts ("Hello"); } また、indent -nbap の出力は以下となる。 int foo () { puts ("Hi"); } /* この手続き bar には意味はない */ char * bar () { puts ("Hello"); } 手続き foo の後には空行は追加されない。
コメント
indent は C と C++ のコメントを整形する。 C のコメントは `/*´ で始まって `*/´ で終り、 改 行文字を含んでもよい。 C++ のコメントは区切り文字 `//´ で始まり改行で終る。 indent はコメントの文脈によって別々の扱い方をする。 indent は文・宣言・ プリプロセッサディ レクティブが後に続くコメントと どのコードの前にも置かれていないコメントを区別する。 どの コードの前にも置かれていないコメントとは、 行が開始されるコメントのことである (カラム 1 か ら始まっている必要はない)。 さらに indent は手続きや集合体の外側にあるコメントと 内側にあるコメントを区別する。 特に手 続きの内側で行の最初にあるコメントは、 コードが現在インデントされているカラムにインデント される。 最も左側のカラムから始まるコメントは例外であり、 コメントはそのカラムから出力され る。 indent は箱形コメントを変更しない。 `*´ や `-´ で四角形や「箱形」に囲んだコメントは、 他か ら視覚的に区別したいという一般的な意図があるためである。 もっと正確に言うと、箱形コメント は次のように定義される。 最初の `/*´ の直後に文字 `*´, `=´, `_´, `-´ が続いているか、 コメ ント開始区切り文字 (`/*´) だけの行があり、 以降の行はコメント開始区切り文字の `*´ と同じカ ラムから `*´ で行が開始される。 箱形コメントの例を示す: /********************** * 箱の中のコメント!! * **********************/ /* * 別な種類のコメントには、 * 別な形式を使う。 */ indent は箱形のコメントを ソースファイルの中に見つかった場所に残しておく。 よってコメント のインデント付けは変わらず、 その長さもどちらにしても変わらない。 別なモードでは、埋め込ま れたタブ文字が適切な数の空白に変換されるだけである。 `-bbb´ オプションが指定された場合、 箱形コメントがコードの前に置かれていないときは、 箱形 コメントの後に空行を置く。 箱形でないコメントは整形される。 これは、行が右端に合うように折り返され、 左側は空白で埋め られるという意味である。 1 つの改行文字は空白と同じであるが、 (1 行に 2 つ以上の改行文字が ある) 空行は パラグラフの切れ目として解釈される。 最初のカラムの後から始まるコメントの整形 は、 `-fca´ オプションで有効になる。 カラム 1 から始まるコメントを整形するには、`-fc1´ を 指定する。 このような整形は、デフォルトでは無効にされている。 整形する際の右端は、デフォルトでは 78 であるが、 `-lc´ オプションで変更できる。 指定された 右端まででコメントが表示できない場合、 コメントの終りまで右端が自動的に拡張される。 コメン トが整形されない場合、右端の位置は守られない。 コメントで行が開始される場合 (つまり、コメントの左側にプログラムの文字列がない場合)、 コメ ントがコードのブロック中になければ、 そのコメントがあったカラムにインデントされる。 この場 合、(最初のカラムからコメントが開始されていなければ) そのブロックのインデントされたコード にコメントの左端を揃える。 揃える位置は `-d´ オプションで変更可能で、 何カラム左へ移動する かを指定する。 指定されない場合は、インデントされない。 例えば、`-d2´ ではコードから左へ空 白 2 個の位置にコメントを置く。 デフォルトではコードにコメントの左端を揃える。 ただし、コ メントが最初のカラムから開始されている場合、 デフォルトではインデントされない。 最初のカラ ムから始まるコメントをコードに左揃えしたい場合は、 `-fc1´ を指定すること。 コードの右側にあるコメントは、デフォルトではカラム 33 にインデントされる。 これは次の 3 つ のオプションのいずれかで変更できる。 `-c´ はコードの後のコメントのカラムを指定する。 `-cd´ は宣言の後のコメントのカラムを指定する。 `-cp´ はプリプロセッサディレクティブ #else と #endif の後のコメントのカラムを指定する。 コメントの左側にあるコードが最初のカラムから開始されていない場合、 コードの終りの次のタブ ストップの位置からコメントカラムが開始される。 プリプロセッサディレクティブが最初のカラム から開始されていない場合、 ディレクティブの終りの 1 カラム後からコメントカラムが開始され る。 この拡張はこのような特定のカラムの出力に対してのみ適応される。 `-cdb´ オプションを指定すると、コメント区切り文字を空行に置く。 よって /* Loving hug */ の ような 1 行のコメントは、 以下のように変換される。 /* Loving hug */ `-sc´ オプションを指定すると、 複数行コメントの始めに `*´ を置くことができる。 上記の 1 行 のコメントは (`-cdb -sc´ により) 以下のように変換される。 /* * Loving hug */
文
`-br´ または `-bl´ オプションは、ブレースをどのように整形するかを指定する。 `-br´ オプションを指定するとブレースは以下のように整形される: if (x > 0) { x--; } `-bl´ オプションを指定するとブレースは以下のように整形される: if (x > 0) { x--; } `-bl´ オプションを使う場合には `-bli´ オプションも使うとよい。 このオプションはブレースの インデント付けに使う空白の数を指定する。 `-bli2´ (デフォルト値)を指定すると、先に示した結 果となる。 `-bli0´ を指定した場合の結果は以下である: if (x > 0) { x--; } `-br´ オプションを使う場合には、多分 `-ce´ も使いたくなるだろう。 このオプションは if-then-else 構文の else を直前の `}´ に隣に置く。 例えば `-br -ce´ を指定すると、出力は以 下のようになる: if (x > 0) { x--; } else { fprintf (stderr, "...something wrong?\n"); } 同じコードで `-br -nce´ を指定すると以下のようになる: if (x > 0) { x--; } else { fprintf (stderr, "...something wrong?\n"); } これにより do-while ループの while は直前の `}´ と同じ行に置かれる。 例えば `-cdw´ により 以下のような出力が得られる。 do { x--; } while (x); 同じコードで `-ncdw´ を指定すると以下のようになる: do { x--; } while (x); `-cli´ オプションは、case 構文のラベルを switch 文から 右にインデントする際に空白をいくつ 入れるかを指定する。 デフォルトでは以下のようなコードが得られる。 switch (i) { case 0: break; case 1: { ++i; } default: break; } `-cli2´ を使うと以下のようになる。 switch (i) { case 0: break; case 1: { ++i; } default: break; } case 文の後のブレースのインデントは、 `-cbin´ オプションで制御できる。 例えば `-cli2 -cbi0´ を使うと次のような結果になる。 switch (i) { case 0: break; case 1: { ++i; } default: break; } セミコロンが for または while 文と同じ行にある場合に `-ss´ を指定すると、空白がセミコロン の前に置かれる。 これによりセミコロンが強調され、 for や while 文の本体が空の文であること がはっきりする。 `-nss´ を指定すると、この機能は無効になる。 `-pcs´ オプションを指定すると、呼び出される手続きの名前と `(´ の間に空白が置かれる (例え ば、puts ("Hi"); となる。 また、`-npcs´ オプションを指定している場合には puts("Hi");) とな る。) `-cs´ オプションを指定すると、 indent はキャスト演算子の後に空白を置く。 `-bs´ オプションを指定すると、 キーワード sizeof とその引き数の間に必ず空白が置かれる。 バージョンによっては、 この機能は `Bill_Shannon´ オプションとして知られている。 `-saf´ オプションは for とその後の括弧の間に空白を入れる。 これがデフォルトである。 `-sai´ オプションは if とその後の括弧の間に空白を入れる。 これがデフォルトである。 `-saw´ オプションは while とその後の括弧の間に空白を入れる。 これがデフォルトである。 `-prs´ オプションは全ての括弧とその間にあるものの間に空白を置く。 例えば `-prs´ を使うと以 下のようなコードになる。 while ( ( e_code - s_code ) < ( dec_ind - 1 ) ) { set_buf_break ( bb_dec_ind ); *e_code++ = ´ ´; }
宣言
デフォルトでは、indent は `-di´ オプションで指定した カラムで識別子を揃える。 例え ば、`-di16´ を指定すると以下のようになる: int foo; char *bar; `-di´ オプションに小さい値 (1 や 2 など) を使うと、 置くことが可能な最初の場所に識別子を置 くことができる。 例を以下に示す: int foo; char *bar; この場合でも、`-di´ オプションに指定した値は 型指定と異なる行に置いた変数には影響を与え る。 例えば、`-di2´ を指定すると以下のようになる: int foo; `-bc´ オプションを指定すると、宣言中のコンマの後に改行が置かれる。 例を以下に示す: int a, b, c; 同じコードで `-nbc´ オプションを指定した場合は以下のようになる: int a, b, c; `-bfda´ オプションを指定すると、 関数宣言の引き数のコンマの後で改行を入れる。 引き数は関数 宣言より 1 段深くインデントされる。 これは引き数のリストが長い場合に特に役立つ。 `-bfde´ オプションを指定すると、 関数宣言の閉括弧の前に改行を入れる。 2 つのオプションとも ´n´ を 設定した -nbdfa と -nbdfe がデフォルトになる。 例えば、 void foo (int arg1, char arg2, int *arg3, long arg4, char arg5); は、`-bfda´ オプションを指定すると次のようになり、 void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5); 更に `-bfde´ オプションを指定すると次のようになる。 void foo ( int arg1, char arg2, int *arg3, long arg4, char arg5 ); `-psl´ オプションを指定すると、 定義される手続きの型は手続きの名前の前の行に置かれる。 こ のスタイルは、etags プログラムや Emacs の c-mode の 一部の機能を正しく動作させるために必要 である。 プログラム中で typedef で定義された型の名前を全て、 `-T´ オプションを使って indent に教え なければならない。 `-T´ は複数個指定することができ、指定された全ての名前を使うことができ る。 例えば、プログラムに typedef unsigned long CODE_ADDR; typedef enum {red, blue, green} COLOR; という記述がある場合には、 オプション `-T CODE_ADDR -T COLOR´ を使うことになるだろう。 `-brs´ や `-bls´ オプションは struct 宣言の ブレースをどのように整形するかを指定する。 `-brs´ オプションはブレースを次のように整形する。 struct foo { int x; }; `-bls´ オプションはブレースを次のように整形する。 struct foo { int x; };
インデント付け
コードを整形する時の問題の 1 つは、 各行をどれだけ左端からインデントさせるかである。 if や for 等の文の先頭部分があると、 インデントの深さは `-i´ オプションで指定した値だけ増える。 例えば、レベルごとに 8 文字分のインデントさせるには `-i8´ を使う。 文が 2 行に折り返されて いる場合、 2 行目は `-ci´ オプションで指定した追加のスペース分だけインデントされる。 `-ci´ のデフォルト値は 0 である。 しかし、`-lp´ オプションが指定されており、かつ同じ行で閉じられ ていない 左括弧がある場合、その続きの行が始まる文字は左括弧の直後の位置に揃えられる。 この 処理は `[´ および初期化リストに現われる `{´ にも適用される。 例えば、`-nlp -ci3´ が有効に なっていると、 行をまたがるコードは以下のようになる: p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); `-lp´ を有効にすると、コードはいくらか見やすくなる: p1 = first_procedure (second_procedure (p2, p3), third_procedure (p4, p5)); 文が 2 つ以上の括弧の組 (...) にわかれている場合、 追加された括弧の組ごとに 1 段深くインデ ントされる。 if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) オプション `-ipN´ は、括弧ごとの追加オフセットを設定するのに使う。 例えば `-ip0´ は上記の コードを次のように整形する。 if ((((i < 2 && k > 0) || p == 0) && q == 1) || n = 0) indent はタブが入力と出力のストリームの両方で 一定の間隔で置かれることを想定している。 こ の間隔はデフォルトでは 8 カラム幅であるが、 (バージョン 1.2 からは) `-ts´ オプションで変更 することができる。 タブは複数個の空白と同じ意味である。 古い形式の関数定義における型宣言のインデント付けは、 `-ip´ パラメータで制御することができ る。 これは、型宣言では空白何個分のインデントを行うかを 指定する数値パラメータである。 例 えばデフォルトの `-ip5´ では、定義は以下のように整形される: char * create_world (x, y, scale) int x; int y; float scale; { . . . } 他のバージョンの indent との互換性のために オプション `-nip´ が用意されている。 これは `-ip0´ と同じである。 ANSI C ではプリプロセッサコマンドラインの文字 `#´ とコマンド名の間に 空白を入れることが許 可されている。 デフォルトでは indent はこの空白を削除するが、 `-lps´ オプションを指定する ことで indent にこの空白を変更しないように指示できる。 オプション `-ppi´ は `-nlps´ と `-lps´ を上書きする。 このオプションにより、 プリプロセッサ条件文を指定された空白数でインデントできる。 例えばオ プション `-ppi 3´ は #if X #if Y #define Z 1 #else #define Z 0 #endif #endif を次のように整形する。 #if X # if Y # define Z 1 # else # define Z 0 # endif #endif
長い行の折り返し
オプション `-ln´ または `--line-lengthn´ により、 C 言語コードの行の最大長を指定することが できる。 ただしコードの後のコメントは含まない。 指定された行の長さより長い場合、 GNU indent は行を論理的な位置で折り返す。 これはバージョ ン 2.1 の新機能であるが、 まだそれほど賢くはなく柔軟でもない。 どこで行を折り返すかを決定するアルゴリズムに干渉するためのオプションが、 現在のところ 2 つ ある。 `-bbo´ オプションを指定すると、GNU indent は 長い行をブーリアン演算子 && と || の前で折り 返す。 `-nbbo´ オプションを指定すると、GNU indent は 長い行をブーリアン演算子の前で折り返 さない。 例えば、(`--line-length60´ と `--ignore-newlines´と一緒に) デフォルトのオプショ ン `-bbo´ を指定することにより、 コードは以下のようになる。 if (mask && ((mask[0] == ´\0´) || (mask[1] == ´\0´ && ((mask[0] == ´0´) || (mask[0] == ´*´))))) オプション `-nbbo´ を使うと、次のようになる。 if (mask && ((mask[0] == ´\0´) || (mask[1] == ´\0´ && ((mask[0] == ´0´) || (mask[0] == ´*´))))) しかしデフォルトの `-hnl´ では、 入力ファイルにおける改行を重視して、 そこで改行するように 可能な限りの優先度を与える。 例えば入力ファイルが以下のような場合、 if (mask && ((mask[0] == ´\0´) || (mask[1] == ´\0´ && ((mask[0] == ´0´) || (mask[0] == ´*´))))) オプション `-hnl´ または `--honour-newlines´ を 上述の `-nbbo´ と `--line-length60´ と一緒 に使うと、 前の例で示したような出力ではなく、 入力ファイルのコードで改行されている位置でな るべく折り返される。 if (mask && ((mask[0] == ´\0´) || (mask[1] == ´\0´ && ((mask[0] == ´0´) || (mask[0] == ´*´))))) このオプションの背景となる考え方は、 既に折り返されている長すぎる行は GNU indent で変更し ないというものである。 しかし本当に汚いコードは、 少なくとも 1 回は `--ignore-newlines´ オ プションを付けて indent に通しておくべきである。
整形の無効化
特別な制御用コメントをプログラムに埋め込むことにより、 C 言語コードを部分的に整形しないよ うにすることができる。 プログラムのあるセクションを整形しないようにするためには、 無効化制 御用コメント /* *INDENT-OFF* */ だけの行を セクションの直前に置けばよい。 この制御用コメン トの後でスキャンされたプログラムテキストは、 有効化コメントだけの行がスキャンされるまで、 入力の通りに変更されず出力される。 有効化制御コメントは /* *INDENT-ON* */ であり、 このコ メントと同じ行で後に続くテキストも整形されずに出力される。 有効化制御コメントの後に続く行 から整形が再開される。 もっと正確に言うと、indent は C 言語コメントの 終了区切り文字 (*/) を検証せず、 その行の空 白は存在が意識されない。 これらの制御コメントは、 C++ の書式、 つまり // *INDENT-OFF* と // *INDENT-ON* でも機能す る。 indent の内部状態は整形しないセクションでも変更されない、 という点に注意すべきである。 よって、例えば関数の途中で整形を無効にして 関数の終りまで無効にし続けた場合、変な結果にな る。 したがって、コードを整形しないことを選択する場合は、 モジュールにしておくのがよい。 歴史的な注意点: 以前のバージョンの indent では *INDENT** で始まるエラーメッセージを生成す るものがあった。 これらのバージョンの indent は、 このようなエラーメッセージで始まる入力テ キスト行を 無視するように書かれていた。 私はこの閉鎖的な機能を GNU indent から削除した。
その他のオプション
使っている indent のバージョンを知るには、 コマンド indent -version を用いること。 これを 用いると、通常の処理は全く行われず、 indent のバージョン番号が表示される。 `-v´ オプションを用いると、詳細表示モードを有効にすることができる。 詳細表示モードで は、indent は 1 つの行を出力で複数行にする時には報告を 行い、実行終了時にサイズに関する情 報を出力する。 `-pmt´ オプションを指定すると、indent は 出力ファイルのアクセス時刻と修正時刻を保存する。 このオプションを使うと、全てのソースファイルとヘッダファイルに indent を実行しても、make はターゲットを再構築しない。 このオプションは POSIX utime(2) 関数がある オペレーティングシ ステムでのみ利用可能である。
バグ
バグは bug-indent@gnu.org に報告してほしい。 同じプロファイルで 1 つのファイルに indent を 2 回実行した場合、 2 回目はファイルを全く変 更しないべきである。 indent の現在の設計では、それは保証できず、 詳細にはテストされていな い。 indent が C を理解しない。 このため、行を結合できない場合もある。 指定されたプロファイル (`.indent.pro´) で indent を実行した結果のファイルを入力として使った場合でも、 indent を通 したファイルが非可逆になる。 C++ に対して indent を動作させることを試みたが、 とても簡単なものでない限り、 C++ のソース に対しては良い結果が得られない。 出力ファイルにコメントを書き出している場合、 indent は指定された `--line-length´ オプショ ンを参照しない。 そのため、たびたびコメントがかなり右に置かれる。 コメントが末尾にある折り 返された行を indent が結合しないようにするため、 コメントが折り返しの最初の行から始まって いることを確認すること。 /* *INDENT-OFF* */ によって indent が無効にされている場合、 indent は行数やコメント数を数 えない (`-v´ オプションを参照)。 /*UPPERCASE*/ という形式のコメントは、 コメントとして扱われないが、次の行と結合する識別子 として扱われる。 この動作によって、コードの最初に埋め込まれない限り、 このタイプのコメント を無用なものにしてしまう。
著作権表示
以下の著作権表示は indent プログラムに適用される。 このマニュアルに関する著作権と複製許可 については、 `indent.texinfo´ と `indent.info´ の先頭近くと `indent.1´ の末尾近くに記述さ れている。 Copyright (c) 2001 David Ingamells. Copyright (c) 1999 Carlo Wood. Copyright (c) 1995, 1996 Joseph Arceneaux. Copyright (c) 1989, 1992, 1993, 1994, 1995, 1996 Free Software Foundation Copyright (c) 1985 Sun Microsystems, Inc. Copyright (c) 1980 The Regents of the University of California. Copyright (c) 1976 Board of Trustees of the University of Illinois. All rights reserved. Redistribution and use in source and binary forms are permitted provided that the above copyright notice and this paragraph are duplicated in all such forms and that any documentation, advertising materials, and other materials related to such distribution and use acknowledge that the software was developed by the University of California, Berkeley, the University of Illinois, Urbana, and Sun Microsystems, Inc. The name of either University or Sun Microsystems may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED ``AS IS´´ AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
オプションの相互参照キー
長い名前についてアルファベット順に並べたオプションのリストを示す。 これを使えば対応する短 いオプション名が簡単に分かる。 --blank-lines-after-commas -bc --blank-lines-after-declarations -bad --blank-lines-after-procedures -bap --blank-lines-before-block-comments -bbb --braces-after-if-line -bl --brace-indent -bli --braces-after-struct-decl-line -bls --braces-on-if-line -br --braces-on-struct-decl-line -brs --break-after-boolean-operator -nbbo --break-before-boolean-operator -bbo --break-function-decl-args -bfda --break-function-decl-args-end -bfde --case-indentation -clin --case-brace-indentation -cbin --comment-delimiters-on-blank-lines -cdb --comment-indentation -cn --continuation-indentation -cin --continue-at-parentheses -lp --cuddle-do-while -cdw --cuddle-else -ce --declaration-comment-column -cdn --declaration-indentation -din --dont-break-function-decl-args -nbfda --dont-break-function-decl-args-end -nbfde --dont-break-procedure-type -npsl --dont-cuddle-do-while -ncdw --dont-cuddle-else -nce --dont-format-comments -nfca --dont-format-first-column-comments -nfc1 --dont-line-up-parentheses -nlp --dont-space-special-semicolon -nss --dont-star-comments -nsc --else-endif-column -cpn --format-all-comments -fca --format-first-column-comments -fc1 --gnu-style -gnu --honour-newlines -hnl --ignore-newlines -nhnl --ignore-profile -npro --indent-level -in --k-and-r-style -kr --leave-optional-blank-lines -nsob --leave-preprocessor-space -lps --line-comments-indentation -dn --line-length -ln --no-blank-lines-after-commas -nbc --no-blank-lines-after-declarations -nbad --no-blank-lines-after-procedures -nbap --no-blank-lines-before-block-comments -nbbb --no-comment-delimiters-on-blank-lines -ncdb --no-space-after-casts -ncs --no-parameter-indentation -nip --no-space-after-for -nsaf --no-space-after-function-call-names -npcs --no-space-after-if -nsai --no-space-after-parentheses -nprs --no-space-after-while -nsaw --no-tabs -nut --no-verbosity -nv --original -orig --parameter-indentation -ipn --paren-indentation -pin --preserve-mtime -pmt --procnames-start-lines -psl --space-after-cast -cs --space-after-for -saf --space-after-if -sai --space-after-parentheses -prs --space-after-procedure-calls -pcs --space-after-while -saw --space-special-semicolon -ss --standard-output -st --start-left-side-of-comments -sc --struct-brace-indentation -sbin --swallow-optional-blank-lines -sob --tab-size -tsn --use-tabs -ut --verbose -v
返り値
不明。
ファイル
$HOME/.indent.pro indent のデフォルトのオプションを設定する
作者
Carlo Wood Joseph Arceneaux Jim Kingdon David Ingamells
履歴
UCB の "indent" プログラムが起源である。
著作権
Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. Copyright (C) 1995, 1996 Joseph Arceneaux. Copyright (C) 1999 Carlo Wood. Copyright (C) 2001 David Ingamells. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. INDENT(1)