cyclo(1) cyclo(1)
Programmer's tools
NAME
cyclo, mcstrip - tools for analysing cyclomatic complexity
SYNOPSIS
cyclo [-l] [-t] [-f|-F] [-n func#] [-p] [-s scale] [-c]
[-d] [-i]
mcstrip [-l] [-c] [-r] [-a] [inputfile]
DESCRIPTION
These two tools are used to measure the cyclomatic complexity of a
piece of ANSI C or C++ code. A postscript flowgraph of the functions
can also be produced.
COMMANDS
mcstrip
This command removes comments, string and character constants from the
input file, or standard input if none is specified. If any of the
following options are given, it will give details of the file instead.
[-l] print number of lines in file
[-c] print number of lines that contain comments
[-r] print ratio of lines against lines with comments
[-a] print all of the above
cyclo
This command takes as its standard input a file that has had the
comments, string and character constants removed (by mcstrip ). It
will then produce either flowcharts or the cyclomatic complexity
number of one or more files in the input.
Information
[-l] prints results of tokenisation
[-t] prints results of flow generation
Functions
[-i] ignores functions declared within a
struct/class/union
[-n func#] limits output of -p,-f,-F,-c to the given
function number, rather than the default of all
functions.
[-f] prints function name(s)
[-F] prints functions called by each source function
[-c] print cyclomatic complexity of function(s)
[-p] produce postscript flow graph
[-s scale] scales postscript output (float)
[-d] prints function names to postscript standard
output
RETURN CODES
mcstrip always returns zero. cyclo returns one in the event of an
error, otherwise it returns zero.
- 1 - Formatted: October 24, 2025
cyclo(1) cyclo(1)
Programmer's tools
EXAMPLES
Information about file
$ mcstrip -a main.C
63 comment lines
1199 lines
5 % comments to lines ratio
Function names
$ mstrip main.C | cyclo -f
Token::Token
Token::~Token
print_funcs
display_arc
display
Function calls
$ mcstrip main.C | cyclo -F -n
print_funcs
setw
setiosflags
print_token
resetiosflags
Flow charts
$ mcstrip main.C | cyclo -p -n
$ gs flow.ps
MORE DETAILED INFORMATION
The cyclomatic complexity measure counts the number of decisions made
within a piece of code. This number is equal to the number of
linearly independent paths through the code. Its main application is
in establishing test cases. Be aware that the measure may not be
useful. It is recommended that further reading is done before using
it.
The following papers contain further relevant information:
'A Complexity Measure' McCabe T.J., IEEE Transactions on Software
Engineering vol SE-2, #4 1976, pp 308-320.
'A Critique of Cyclomatic Complexity as a Software Metric' Shepperd
M., Software Engineering Journal, March 1988, pp 30-36.
'Software Defect Prevention Using McCabe's Complexity Metric' Ward
W.T., Hewlett-Packard Journal, April 1989, pp 64-69.
SEE ALSO
cflow(1), wc(1)
LIMITATIONS
Only the ANSI C method of declaring functions is recognised.
- 2 - Formatted: October 24, 2025
cyclo(1) cyclo(1)
Programmer's tools
Constructors that have an initialiser list have their names
incorrectly detected.
Lexical elements that span more than one line are not recognised.
This includes strings terminating with a continuation slash, struct
and the following tag, and function names and the following opening
parenthesis.
COPYRIGHT
(c) 1993 Roger Binns
These tools were produced by Roger Binns for a fourth year project as
part of a computer science degree, for the Computer Science
department, Brunel University, Uxbridge, Middlesex UB8 3PH, United
Kingdom.
This software is provided in good faith, having been developed by
Brunel University students as part of their normal course work. It
should not be assumed that Brunel has any rights of ownership, and the
University cannot accept any liability for its subsequent use. It is
a condition of any such use that the user idemnifies the University
against any claim (including third party claims) arising therefrom.
The cyclo tool was updated in 1996 to hande function declarations
better and to fix a few bugs. See the README for more information.
- 3 - Formatted: October 24, 2025