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.