Man Page cflow.1




NAME

     cflow - generate C flowgraph


SYNOPSIS

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


DESCRIPTION

     The cflow command analyzes a collection  of  C,  yacc,  lex,
     assembler,  and object files and builds a graph charting the
     external function references.  Files suffixed with  .y,  .l,
     and  .c  are  processed  by yacc, lex, and the C compiler as
     appropriate.  The results of  the  preprocessed  files,  and
     files  suffixed with .i, are then run through the first pass
     of lint.  Files suffixed with .s are  assembled.   Assembled
     files,   and   files  suffixed  with  .o,  have  information
     extracted from their symbol tables.  The  results  are  col-
     lected  and  turned into a graph of external references that
     is written on the standard output.

     Each line of output begins with a reference number, followed
     by  a suitable number of tabs indicating the level, then the
     name of the global symbol followed by a colon and its defin-
     ition.   Normally only function names that do not begin with
     an underscore are listed (see the -i  options  below).   For
     information extracted from C source, the definition consists
     of an abstract type declaration (e.g., char *), and,  delim-
     ited  by angle brackets, the name of the source file and the
     line number where the  definition  was  found.   Definitions
     extracted from object files indicate the file name and loca-
     tion counter under which the symbol appeared  (e.g.,  text).
     Leading  underscores  in C-style external names are deleted.
     Once a definition of a name  has  been  printed,  subsequent
     references to that name contain only the reference number of
     the line where the definition may be found.   For  undefined
     references, only <> is printed.

     As an example, suppose the following code is in file.c:

          int  i;
          main()
          {
               f();
               g();
               f();
          }
          f()
          {
               i = h();
          }
     The command


          cflow -ix file.c

     produces the output

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

     When the nesting level becomes too deep, the output of cflow
     can  be  piped  to  the  pr command, using the -e option, to
     compress the tab expansion  to  something  less  than  every
     eight spaces.

     In addition to the -D, -I, and -U options, which are  inter-
     preted  just  as  they  are by cc, the following options are
     interpreted by cflow:

     -r     Reverse the ``caller:callee'' relationship  producing
            an inverted listing showing the callers of each func-
            tion.  The listing is also sorted in  lexicographical
            order by callee.

     -ix    Include external and static data symbols. The default
            is to include only functions in the flowgraph.

     -i_    Include names that  begin  with  an  underscore.  The
            default  is  to  exclude these functions (and data if
            -ix is used).

     -dnum  The num decimal integer indicates the depth at  which
            the  flowgraph is cut off.  By default this number is
            very large.  Attempts to set the cutoff  depth  to  a
            nonpositive integer will be ignored.


SEE ALSO

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


DIAGNOSTICS

     Complains about multiple definitions and only  believes  the
     first.


NOTES

     Files produced by lex and yacc cause the reordering of  line
     number declarations, which can confuse cflow.  To get proper
     results, feed cflow the yacc or lex input.