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

## 名前

         cflow - C フローグラフの作成

## 形式

         cflow [-r] [-ix] [-i_] [-dnum] files

## 機能説明

         cflow コマンドは、 C 、 yacc 、 lex アセンブラのソースファイ
         ル、中間ファイル、オブジェクトファイルをまとめて解析し、そこ
         から外部関数参照のグラフを作成します。 .y、.l、.c のいずれか
         の 接尾辞が付いたファイルは、それぞれ yacc 、 lex 、C のコン
         パイラによって処理します。前処理された結果、接尾辞 .i が付い
         た ファイルは、 lint の第 1 段階までの処理を行います。接尾辞
         .s が付いたファイルはアセンブルします。アセンブルされた ファ
         イル、接尾辞 .o が付いたファイルは、それぞれのシンボルテーブ
         ルから抽出された情報を持っています。これらの結果を収集して外
         部参照のグラフを作成し、それを標準出力に書き込みます。

         出力の各行には先頭から順に、参照番号、レベルを示す適切な数の
         タブ、大域シンボルの名前、コロン、大域シンボルの定義が示され
         ます。通常、出力の対象となるのは下線で始まらない関数名だけで
         す  ( 下 記の -i オプションを参照)。C のソースから抽出した場
         合、定義の部分には抽象型宣言 (char * など) と、その 後 ろ に
         ソー スファイルの名前とその定義が存在する行番号とが山括弧 <>
         で囲んで示されます。オブジェクトファイルから抽出された 定 義
         は、ファイル名とシンボルが現れた場所のロケーション・カウンタ
         ( text など) を示します。C 形式の外部名における先頭の下線 は
         削除されます。ある名前の定義が一度出力されると、それ以降で同
         じ名前を参照している場所は、その定義が存在する行の参照番号だ
         け が 示されます。未定義のシンボルを参照している場所では、<>
         だけが出力されます。

         たとえば、file.c に次のコードが含まれているとします。

              int  i;

              main()
              {
                   f();
                   g();
                   f();
              }

              f()
              {
                   i = h();
              }
         コマンド

              cflow -ix file.c

         を実行すると、次の出力が得られます。

              1    main: int(), <file.c 4>
              2         f: int(), <file.c 11>
              3              h: <>
              4              i: int, <file.c 1>
              5         g: <>

         入れ子のレベルがあまりにも深くなるときは、パイ プ を 使っ て
         cflow の出力を pr コマンドに渡し、その -e オプションでタブの
         カラム数を 8 より少なくすれば、各行を短くすることが で き ま
         す。

         cc で指定したときと同じように解釈される -D 、 -I 、 -U の 各
         オプションのほか、 cflow は次のオプションを解釈します。

         -r     「呼び出し元 : 呼び出し先」の関係を逆にし、各関数の呼
                び 出し元を示す反転リストを作成します。このリストはま
                た、呼び出し先に従って辞書式順序でソートされます。

         -ix    外部データ・シンボルと静的データ・シンボルを 含 み ま
                す。 デフォルトでは、関数だけがフローグラフに含まれま
                す。

         -i_    下線で始まる名前も含みます。デフォルトでは、これら の
                関数が除外されます ( -ix を使用したときには、データも
                除外の対象になります)。

         -dnum  num は、フローグラフの深さを指定する 10 進整数で す。
                デ フォルトでは、この数値が非常に大きくなっています。
                num がゼロ以下のときは無視されます。

## 関連項目

         as(1)、 cc(1)、 lex(1)、 lint(1)、 nm(1)、 pr(1)、 yacc(1)

## 診断

         同じ名前に対して複数の定義が行われていた場合は、最初に見つけ
         た定義だけを採用します。

## 注意事項

         lex や yacc で作成されたファイルでは、行番号宣言の順序が変更
         さ れているため、 cflow が混乱する可能性があります。正しい結
         果を得るために、 yacc および lex の入力ファイルを指定して く
         ださい。