Manual page for CFLOW(1V)
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
[a manual with the abbreviation INSTALL]
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 processing
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 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.
SYSTEM V DESCRIPTION
The System V version of
cflow
in
/usr/5bin/cflow
makes the
C
preprocessor,
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 flowgraph
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(), <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
-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
programs 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 declarations which can
confuse
cflow.
To get proper results, feed
cflow
the
yacc
or
lex
input.
Created by unroff & hp-tools.
© somebody (See intro for details). All Rights Reserved.
Last modified 11/5/97