C フォーマッター

C フォーマッターは、貼り付けた C のコードをタブで再インデントし、ハイライト表示する KivTools の整形ツールです。文字列・コメント・プリプロセッサ行には手を入れず、コンパイルや構文検証も行いません。

ブラウザ内でローカルに実行

C コードを整形する手順

C のコードをエディターに貼り付けて整形ボタンを押すと、波かっことセミコロンの後ろで行を分割し直し、タブでインデントした結果を下のパネルにハイライト表示します。

文字列やコメント、プリプロセッサ行には手を入れないテキストレベルの整形で、コンパイラーではありません。エディターには元の入力が残るので、二つを見比べられます。

  1. エディターに C のコードを貼り付けるか入力します。初期表示のサンプルは上書きしてかまいません。
  2. 「C 言語のコード整形」を押すと、下のハイライトされたパネルに結果が出ます。
  3. 入力後に内容を変えると、前の結果が薄くなって再実行を促す案内が出るので、古い結果が最新として表示されることはありません。
  4. 「コピー」でパネルの整形済みテキストをクリップボードに取り込み、「クリア」で入力と結果を空にします。
  5. 出力が非常に大きい場合は、タブが固まらないようハイライトをやめてプレーンテキストで表示します。

フォーマッターが書き換える部分と、そのまま残す部分

そのまま残るもの

実測: char *p="a;b}"; の文字列内のセミコロンと波かっこはそのまま残り、コメント /* block ; { } */ の記号も変化せず、行継続を含むマクロ(#define LONG(a) do { \ ...)は改行も含めて一字一句そのまま戻ります。#define X {1,2} が 1 行のままなのも同じ理由です。

動かすのは空白だけ、というのがこのツールの役割です。マクロ内の正確な空白や行継続に意味があるコードでは、プログラムを変えてしまうリスクを避けて手を付けません。

レイアウトがおおよそになる場面

文法ではなく文字列の走査で整形するため、詰め込んだ 1 行はルールに従って展開されます。struct S{int a;char *b;};typedef struct S S; は 4 行になりますが、末尾の };typedef struct S S; は 1 行のままです。式の空白は組み替えません。

コンパイルも構文解析も検証も行いません。セミコロンの欠落やかっこの不整合があってもエラーにはならず、それらしいレイアウトを返すだけなので、出力は読みやすい下書きとして扱い、そのあとコンパイラーやリンターに通してください。

大きなファイルの扱い

整形はページ内だけで完結します。64 KB のサンプル(4,000 文、出力約 82 KB)は Chrome で 1 秒未満で返り、実行中にネットワーク要求は一切発生しません。接続がなくても動作します。

出力が約 120,000 文字を超えると、タブを止めないようハイライトを止めてプレーンテキストに切り替わります。それほど大きいファイルは、入力を分割するかローカルのフォーマッターを使う方が快適です。

最近使ったツール: