


      LINT(1)                     (UNIX 5.2)                    LINT(1)



      NAME
           lint - a C program checker

      SYNTAX
           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
           variables 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 rc(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,
           intermixed 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



      Page 1                                          (73 A2 02MT REV1)






      LINT(1)                     (UNIX 5.2)                    LINT(1)



                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
                functions.

           -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
                example, 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.

           -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).

           The -D, -U, and -I options of cpp(1) and the -g and -O
           options of rc(1) are also recognized as separate arguments.
           The -g and -O options are ignored, but, by recognizing these



      Page 2                                          (73 A2 02MT REV1)






      LINT(1)                     (UNIX 5.2)                    LINT(1)



           options, lint's behavior is closer to that of the rc(1)
           command.  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.
           Therefore, 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
                     declaration.  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
           consistency.  At this point, if it is not clear whether a
           complaint stems from a given source file or from one of its
           included files, the source file name will be printed
           followed by a question mark.

           The behavior of the -c and the -o options allows for
           incremental 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 the needed -lx options.  This will print



      Page 3                                          (73 A2 02MT REV1)






      LINT(1)                     (UNIX 5.2)                    LINT(1)



           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.



















































      Page 4                                          (73 A2 02MT REV1)






      LINT(1)                     (UNIX 5.2)                    LINT(1)



      FILES
           /usr/lib               the directory where the lint
                                  libraries specified by the -lx option
                                  must exist
           /usr/lib/lint[12]      first and second passes
           /usr/lib/llib-lc.ln    declarations for C Library functions
                                  (binary format; source is in
                                  /usr/lib/llib-lc)
           /usr/lib/llib-port.ln  declarations for portable functions
                                  (binary format; source is in
                                  /usr/lib/llib-port)
           /usr/lib/llib-lm.ln    declarations for Math Library
                                  functions (binary format; source is
                                  in /usr/lib/llib-lm)
           /usr/tmp/*lint*        temporaries

      SEE ALSO
           rc(1), cpp(1), make(1).

      BUGS
           exit(2), longjmp(3C)(partofsetjmp(3C)), and other functions
           that do not return are not understood; this causes various
           lies.
































      Page 5                                          (73 A2 02MT REV1)



