LINT(1-SysV) RISC/os Reference Manual LINT(1-SysV)
NAME
lint - a C program checker
SYNOPSIS
lint [ option ] ... file ...
DESCRIPTION
lint attempts to detect features of the C program files that
are likely to be bugs, non-portable, or wasteful. It also
checks type usage more strictly than the compilers. Among
the things that are currently detected are unreachable
statements, loops not entered at the top, automatic vari-
ables declared and not used, and logical expressions whose
value is constant. Moreover, the usage of functions is
checked to find functions that return values in some places
and not in others, functions called with varying numbers or
types of arguments, and functions whose values are not used
or whose values are used but none returned.
Arguments whose names end with .c are taken to be C source
files. Arguments whose names end with .ln are taken to be
the result of an earlier invocation of lint with either the
-c or the -o option used. The .ln files are analogous to .o
(object) files that are produced by the cc(1) command when
given a .c file as input. Files with other suffixes are
warned about and ignored.
lint will take all the .c,.ln, and llib-lx.ln (specified by
-lx) files and process them in their command line order. By
default, lint appends the standard C lint library (llib-
lc.ln) to the end of the list of files. However, if the -p
option is used, the portable C lint library (llib-port.ln)
is appended instead. When the -c option is not used, the
second pass of lint checks this list of files for mutual
compatibility. When the -c option is used, the .ln and the
llib-lx.ln files are ignored.
Any number of lint options may be used, in any order, inter-
mixed with file-name arguments. The following options are
used to suppress certain kinds of complaints:
-a Suppress complaints about assignments of long values to
variables that are not long.
-b Suppress complaints about break statements that cannot
be reached. (Programs produced by lex or yacc will
often result in many such complaints).
-h Do not apply heuristic tests that attempt to intuit
bugs, improve style, and reduce waste.
-u Suppress complaints about functions and external
Printed 1/15/91 Page 1
LINT(1-SysV) RISC/os Reference Manual LINT(1-SysV)
variables used and not defined, or defined and not
used. (This option is suitable for running lint on a
subset of files of a larger program).
-v Suppress complaints about unused arguments in func-
tions.
-x Do not report variables referred to by external
declarations but never used.
The following arguments alter lint's behavior:
-lx Include additional lint library llib-lx.ln. For exam-
ple, you can include a lint version of the Math Library
llib-lm.ln by inserting -lm on the command line. This
argument does not suppress the default use of llib-
lc.ln. These lint libraries must be in the assumed
directory. This option can be used to reference local
lint libraries and is useful in the development of
multi-file projects.
-n Do not check compatibility against either the standard
or the portable lint library.
-p Attempt to check portability to other dialects (IBM and
GCOS) of C. Along with stricter checking, this option
causes all non-external names to be truncated to eight
characters and all external names to be truncated to
six characters and one case.
-systypesys
Use include files and lint libraries from the system
specified, eg. -systype bsd43
-c Cause lint to produce a .ln file for every .c file on
the command line. These .ln files are the product of
lint's first pass only, and are not checked for inter-
function compatibility.
-o lib
Cause lint to create a lint library with the name
llib-llib.ln. The -c option nullifies any use of the
-o option. The lint library produced is the input that
is given to lint's second pass. The -o option simply
causes this file to be saved in the named lint library.
To produce a llib-llib.ln without extraneous messages,
use of the -x option is suggested. The -v option is
useful if the source file(s) for the lint library are
just external interfaces (for example, the way the file
llib-lc is written). These option settings are also
available through the use of ``lint comments'' (see
below).
Page 2 Printed 1/15/91
LINT(1-SysV) RISC/os Reference Manual LINT(1-SysV)
The -D, -U, and -I options of cpp(1) and the -g and -O
options of cc(1) are also recognized as separate arguments.
The -g and -O options are ignored, but, by recognizing these
options, lint's behavior is closer to that of the cc(1) com-
mand. Other options are warned about and ignored. The
pre-processor symbol ``lint'' is defined to allow certain
questionable code to be altered or removed for lint. There-
fore, the symbol ``lint'' should be thought of as a reserved
word for all code that is planned to be checked by lint.
Certain conventional comments in the C source will change
the behavior of lint:
/*NOTREACHED*/
at appropriate points stops comments about
unreachable code. (This comment is typically
placed just after calls to functions like
exit(2)).
/*VARARGSn*/
suppresses the usual checking for variable numbers
of arguments in the following function declara-
tion. The data types of the first n arguments are
checked; a missing n is taken to be 0.
/*ARGSUSED*/
turns on the -v option for the next function.
/*LINTLIBRARY*/
at the beginning of a file shuts off complaints
about unused functions and function arguments in
this file. This is equivalent to using the -v and
-x options.
lint produces its first output on a per-source-file basis.
Complaints regarding included files are collected and
printed after all source files have been processed.
Finally, if the -c option is not used, information gathered
from all input files is collected and checked for con-
sistency. At this point, if it is not clear whether a com-
plaint stems from a given source file or from one of its
included files, the source file name will be printed fol-
lowed by a question mark.
The behavior of the -c and the -o options allows for incre-
mental use of lint on a set of C source files. Generally,
one invokes lint once for each source file with the -c
option. Each of these invocations produces a .ln file which
corresponds to the .c file, and prints all messages that are
about just that source file. After all the source files
have been separately run through lint, it is invoked once
more (without the -c option), listing all the .ln files with
Printed 1/15/91 Page 3
LINT(1-SysV) RISC/os Reference Manual LINT(1-SysV)
the needed -lx options. This will print all the inter-file
inconsistencies. This scheme works well with make(1); it
allows make to be used to lint only the source files that
have been modified since the last time the set of source
files were linted.
FILES
/usr/lib/lint the directory where the lint
libraries specified by the -lx
option must exist
(/bsd43/usr/lib/lint if the -
systype bsd43 option is given).
This directory also contains the
lint library sources.
/usr/lib/cmplrs/cc/lint[12]
first and second passes of lint
llib-lc.ln declarations for C Library func-
tions (binary format; source is in
llib-lc)
llib-port.ln declarations for portable functions
(binary format; source is in llib-
port)
llib-lm.ln declarations for Math Library func-
tions (binary format; source is in
llib-lm)
llib-lcurses.ln declarations for Curses Library
functions (binary format; source is
in llib-lcurses)
*lint* temporary files (default directory
/usr/tmp)
SEE ALSO
cc(1), cpp(1), make(1).
BUGS
exit(2), longjmp(3C), and other functions that do not return
are not understood; this causes various lies.
Page 4 Printed 1/15/91