CFLOW(1) INTERACTIVE UNIX System 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 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 .s are assembled. Assem-
bled 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 which
is displayed upon 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, given the following in file.c:
int i;
main()
{
f();
g();
f();
}
f()
{
i = h();
}
Rev. C Software Development Set Page 1
CFLOW(1) INTERACTIVE UNIX System CFLOW(1)
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.
In addition to the -D, -I, and -U options [which are inter-
preted just as they are by cc(1) and cpp(1)], 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 is a very
large number. Attempts to set the cutoff depth to a
nonpositive integer will be ignored.
SEE ALSO
as(1), cc(1), cpp(1), lex(1), lint(1), nm(1), yacc(1).
pr(1) in the INTERACTIVE UNIX System User's/System
Administrator's Reference Manual.
DIAGNOSTICS
Complains about 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.
Rev. C Software Development Set Page 2