CFLOW(1) SysV CFLOW(1)
NAME
cflow - generate C flowgraph
SYNOPSIS
cflow [-r] [-ix] [-i_ ] [-dnum] files
DESCRIPTION
cflow analyzes a collection of C, yacc, lex, and object files and
attempts to build a graph charting the external references. Files
suffixed with .y, .l, and .c are yacced, lexed, and C-preprocessed as
appropriate. The results of the preprocessed files, and files suffixed
with .i, are then run through the first pass of lint(1). Files suffixed
with .o, have information extracted from their symbol tables. The results
are collected and turned into a graph of external references, which is
displayed 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 definition. Usually 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 (char, for instance), 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 (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.
OPTIONS
In addition to the -D, -I, and -U options [which are interpreted just as
they are by cc(1) and cpp(1)], the following options are interpreted by
cflow:
-r Reverses 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 Includes external and static data symbols. The default is to
include only functions in the flowgraph.
-i_ Includes 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 is a very large number.
Attempts to set the cutoff depth to a nonpositive integer will
be ignored.
EXAMPLE
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(), <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 pr(1), using the -e option, to compress the tab expansion to something
less than every eight spaces.
DIAGNOSTICS
Notifies you of bad options. Complains about multiple definitions and
only believes the first. Other messages may come from the various
programs used (e.g., the C-preprocessor).
BUGS
Files produced by lex(1) and yacc(1) cause the reordering of line number
declarations which can confuse cflow. To get proper results, feed cflow
the yacc or lex input.
SEE ALSO
cc(1), cpp(1), lex(1), lint(1), nm(1), yacc(1).
pr(1) in Using Your SysV Environment.