NAME
lint - a C program verifier
SYNOPSIS
lint [ -abchnpuvx ] file ...
DESCRIPTION
Lint attempts to detect features of the C program files
which are
likely to be bugs, or non-portable, or wasteful. It also
checks
the type usage of the program more strictly than the
compilers.
Among the things which are currently found are unreachable
statements, loops not entered at the top, automatic
variables
declared and not used, and logical expressions whose value
is
constant. Moreover, the usage of functions is checked to
find
functions which return values in some places and not in
others,
functions called with varying numbers of arguments, and
functions
whose values are not used.
By default, it is assumed that
all the files are to be loaded
together; they are checked for mutual compatibility.
Function
definitions for certain libraries are available to lint;
these
libraries are referred to by a conventional name, such as
‘-lm’, in
the style of ld(1). Arguments ending in .ln are also treated
as
library files. To create lint libraries, use the -C
option:
lint -Cfoo files . . .
where files are the C sources of
library foo. The result is a file
llib-lfoo.ln in the correct library format suitable for
linting
programs using foo.
Any number of the options in the
following list may be used. The
-D, -U, and -I options of cc(1) are also recognized as
separate
arguments.
p Attempt to check portability
to the IBM and GCOS dialects of
C.
h Apply a number of heuristic
tests to attempt to intuit bugs,
improve style, and reduce waste.
b Report break statements that
cannot be reached. (This is not
the default because, unfortunately, most lex and many yacc
outputs produce dozens of such comments.)
v Suppress complaints about unused arguments in functions.
x Report variables referred to
by extern declarations, but never
used.
a Report assignments of long values to int variables.
c Complain about casts which have questionable portability.
u Do not complain about
functions and variables used and not
defined, or defined and not used (this is suitable for
running
lint on a subset of files out of a larger program).
n Do not check compatibility against the standard library.
z Do not complain about
structures that are never defined (e.g.
using a structure pointer without knowing its
contents.).
Exit(2) and other functions
which do not return are not understood;
this causes various lies.
Certain conventional comments in
the C source will change the
behavior of lint:
/*NOTREACHED*/
at appropriate points stops comments about unreachable
code.
/*VARARGSn*/
suppresses the usual checking for variable numbers of
arguments in the following function declaration. The data
types of the first n arguments are checked; a missing n is
taken to be 0.
/*NOSTRICT*/
shuts off strict type checking in the next expression.
/*ARGSUSED*/
turns on the -v option for the next function.
/*LINTLIBRARY*/
at the beginning of a file shuts off complaints about unused
functions in this file.
AUTHOR
S.C. Johnson. Lint library construction implemented by
Edward
Wang.
FILES
/usr/lib/lint/lint[12] programs
/usr/lib/lint/llib-lc.ln declarations for standard functions
/usr/lib/lint/llib-lc human readable version of above
/usr/lib/lint/llib-port.ln declarations for portable
functions
/usr/lib/lint/llib-port human readable . . .
llib-l*.ln library created with -C
SEE ALSO
cc(1)
S. C. Johnson, Lint, a C Program Checker (included in the
MachTen
Programmer’s Guide)
BUGS
There are some things you just can’t get lint to shut
up about.
/*NOSTRICT*/ is not implemented in the current version (alas).