LINT(1)             UNIX Programmer's Manual              LINT(1)



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. Lint libaries are always named as "llib-lname.ln," where "name" is the library name. Arguments of the form "-lname" will cause Lint to include the library called "name". Arguments ending in .ln are also treated as library files. Lint includes a library for PrincOps machines (D-Machines) by default. Also available are libraries for Unix and general portablility. It is recommended that one at least use the default PrincOps library. This is the most complete and the strictest. It should be backwards compatible with most Unix machines. 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. (Don't include the PrincOps library.)

     X    Attempt to check portability to BSD4.2 Unix dialects
          of C. (Don't include the PrincOps library.)

     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 portabil-
          ity.

     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
     llib-ld.ln		declarations for standard PrincOps functions
     d			human readable version of above
     llib-lc.ln		declarations for standard Unix functions
     c			human readable version of above
     llib-port.ln		declarations for portable functions
     port		human readable . . .

SEE ALSO
     cc(1)
     S. C. Johnson, Lint, a C Program Checker

BUGS
     There are some things you just can't get lint to shut up about.

     /*NOSTRICT*/ is not implemented in the current version (alas).








































Printed 9/6/86           March 17, 1986                         3