unixdev.net


Switch to SpeakEasy.net DSL

The Modular Manual Browser

Home Page
Manual: (SunOS-4.1.3)
Page:
Section:
Apropos / Subsearch:
optional field

CFLOW(1V)                                                            CFLOW(1V)



NAME
       cflow - generate a flow graph for a C program

SYNOPSIS
       cflow [-r] [-ix] [ -i_ ] [ -dnum ] filenames

SYSTEM V SYNOPSIS
       cflow [-r] [-ix] [ -i_ ] [ -dnum ] filenames

AVAILABILITY
       This  command  is  available  with  the  System V software installation
       option.  Refer to for information on how to install optional software.

DESCRIPTION
       cflow analyzes a collection of C,  yacc,  lex,  assembler,  and  object
       files  and  attempts to build a graph charting the external references.
       Files suffixed in .y and .l are run through yacc and lex, respectively;
       the  output  of yacc and lex for those files, and files suffixed in .c,
       are first run through the C preprocessor and then run through the first
       pass  of  lint(1V).   (The -I, -D, and -U options of the C preprocessor
       are also understood.)  Files suffixed in .i are passed directly to  the
       first pass of lint.  Files suffixed with .s are assembled.  Information
       is extracted from the symbol tables of the output of the assembler  and
       from  files  suffixed with .o.  The output of all this non-trivial pro-
       cessing is collected and turned into a  graph  of  external  references
       which is displayed upon the standard output.

       Each  line  of  output  begins with a reference (that is, line) number,
       followed by a suitable number of tabs indicating the level.   Then  the
       name of the global (normally only a function not defined as an external
       or beginning with an underscore; see below for the -i inclusion option)
       a  colon  and its definition.  For information extracted from C source,
       the definition consists of an abstract type declaration  (for  example,
       char  *), and, delimited 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 location counter
       under which the symbol appeared (for example,  text).   Leading  under-
       scores 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 defi-
       nition may be found.  For undefined references, only <&lt;>&gt; is printed.

SYSTEM V DESCRIPTION
       The System V version of cflow in /usr/5bin/cflow makes the C preproces-
       sor, cpp(1)  search  in  /usr/5include  for  include  files  before  it
       searches in /usr/include.

OPTIONS
       The following options are interpreted by cflow :

       -r     Reverse the ``caller:callee'' relationship producing an inverted
              listing showing the callers of each function.   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 flow-
              graph is cut off.  By default  this  is  a  very  large  number.
              Attempts  to  set the cutoff depth to a nonpositive integer will
              be met with contempt.

EXAMPLES
       As an example, given the following in file.c:

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

       the command:

                   cflow -ix file.c
              produces the output
                   1    main: int(), <&lt;file.c 4>&gt;
                   2         f: int(), <&lt;file.c 11>&gt;
                   3              h: <&lt;>&gt;
                   4              i: int, <&lt;file.c 1>&gt;
                   5         g: <&lt;>&gt;
              When the nesting level becomes too deep, the -e option of pr(1V)
              can be used to compress the tab expansion to something less than
              eight spaces.

SEE ALSO
       as(1), cc(1V), cpp(1), lex(1), lint(1V), nm(1), pr(1V), yacc(1)

DIAGNOSTICS
       Complains about bad options.  Complains about multiple definitions  and
       only believes the first.  Other messages may come from the various pro-
       grams used, such as the C preprocessor.

NOTES
       While the compiler allows 8-bit strings and comments,  8-bits  are  not
       allowed  anywhere  else.  See cc(1V) for an explanation about why cc is
       not 8-bit clean.

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




                               16 September 1989                     CFLOW(1V)