Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lint(1) — UnixWare 2.01

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

make(1)






       lint(1)                                                      lint(1)


       NAME
             lint - a C program checker

       SYNOPSIS
             lint [options] file . . .

       DESCRIPTION
             lint detects features of C program files which are likely to
             be bugs, non-portable, or wasteful.  It also checks type usage
             more strictly than the compiler.  lint issues error and
             warning messages.  Among the things it detects are unreachable
             statements, loops not entered at the top, automatic variables
             declared and not used, and logical expressions whose value is
             constant.  lint checks for 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 not returned.

             Arguments that 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 takes all the .c, .ln, and llib-lx.ln (specified by -lx)
             files and processes 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.  When the -c option is used,
             the .ln and the llib-lx.ln files are ignored.  When the -c
             option is not used, the second pass of lint checks the .ln and
             the llib-lx.ln list of files for mutual compatibility.

             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.

             -h    Do not apply heuristic tests that attempt to intuit
                   bugs, improve style, and reduce waste.



                           Copyright 1994 Novell, Inc.               Page 1













      lint(1)                                                      lint(1)


            -m    Suppress complaints about external symbols that could be
                  declared static.

            -u    Suppress complaints about functions and external
                  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:

            -Idir Search for included header files in the directory dir
                  before searching the current directory and/or the
                  standard place.

            -lx   Include the 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.

            -Ldir Search for lint libraries in dir before searching the
                  standard place.

            -n    Do not check compatibility against the standard C lint
                  library.

            -p    Attempt to check portability to other machines.  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.

            -s    Produce one-line diagnostics only.  lint occasionally
                  buffers messages to produce a compound report.

            -k    Alter the behavior of /*LINTED [message]*/ directives.
                  Normally, lint will suppress warning messages for the
                  code following these directives.  Instead of suppressing


                          Copyright 1994 Novell, Inc.               Page 2













       lint(1)                                                      lint(1)


                   the messages, lint prints an additional message
                   containing the comment inside the directive.

             -y    Specify that the file being linted will be treated as if
                   the /*LINTLIBRARY*/ directive had been used.  A lint
                   library is normally created by using the /*LINTLIBRARY*/
                   directive.

             -F    Print pathnames of files.  lint normally prints the
                   filename without the path.

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

             -ox   Cause lint to create a lint library with the name llib-
                   lx.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-lx.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.
                   Some of the above settings are also available through
                   the use of ``lint comments'' (see below).

             -V    Write to standard error the product name and release.

             -Wfile
                   Write a .ln file to file, for use by cflow(1).

             -Rfile
                   Write a .ln file to file, for use by cxref(1).

             lint recognizes many cc(1) command line options, including -D,
             -U, -g, -O, -Xt, -Xa, and -Xc, although -g and -O are ignored.
             Unrecognized options are warned about and ignored.  The
             predefined macro lint is defined to allow certain
             questionable code to be altered or removed for lint.  Thus,
             the symbol lint should be thought of as a reserved word for
             all code that is planned to be checked by lint.





                           Copyright 1994 Novell, Inc.               Page 3













      lint(1)                                                      lint(1)


            Certain conventional comments in the C source will change the
            behavior of lint:

            /*ARGSUSEDn*/
                  makes lint check only the first n arguments for usage; a
                  missing n is taken to be 0 (this option acts like the -v
                  option for the next function).

            /*CONSTCOND*/ or /*CONSTANTCOND*/ or /*CONSTANTCONDITION*/
                  suppresses complaints about constant operands for the
                  next expression.

            /*EMPTY*/
                  suppresses complaints about a null statement consequent
                  on an if statement.  This directive should be placed
                  after the test expression, and before the semicolon.
                  This directive is supplied to support empty if
                  statements when a valid else statement follows.  It
                  suppresses messages on an empty else consequent.

            /*FALLTHRU*/ or /*FALLTHROUGH*/
                  suppresses complaints about fall through to a case or
                  default labeled statement.  This directive should be
                  placed immediately preceding the label.

            /*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.

            /*LINTED [message]*/
                  suppresses any intra-file warning except those dealing
                  with unused variables or functions.  This directive
                  should be placed on the line immediately preceding where
                  the lint warning occurred.  The -k option alters the way
                  in which lint handles this directive.  Instead of
                  suppressing messages, lint will print an additional
                  message, if any, contained in the comment.  This
                  directive is useful in conjunction with the -s option
                  for post-lint filtering.

            /*NOTREACHED*/
                  at appropriate points stops comments about unreachable
                  code.  [This comment is typically placed just after
                  calls to functions like exit(2)].



                          Copyright 1994 Novell, Inc.               Page 4













       lint(1)                                                      lint(1)


             /*PRINTFLIKEn*/
                   makes lint check the first (n-1) arguments as usual.
                   The nth argument is interpreted as a printf format
                   string that is used to check the remaining arguments.

             /*PROTOLIBn*/
                   causes lint to treat function declaration prototypes as
                   function definitions if n is non-zero.  This directive
                   can only be used in conjunction with the /* LINTLIBRARY
                   */ directive.  If n is zero, function prototypes will be
                   treated normally.

             /*SCANFLIKEn*/
                   makes lint check the first (n-1) arguments as usual.
                   The nth argument is interpreted as a scanf format string
                   that is used to check the remaining arguments.

             /*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.  The use of the ellipsis
                   terminator (. . .) in the definition is suggested in new
                   or updated code.

             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, if -s is not
             specified.  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 filename 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 that
             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 all the inter-file
             inconsistencies.  This scheme works well with make; it allows
             make to be used to lint only the source files that have been


                           Copyright 1994 Novell, Inc.               Page 5













      lint(1)                                                      lint(1)


            modified since the last time the set of source files were
            linted.

      FILES
            LIBDIR                  the directory where the lint libraries
                                    specified by the -lx option must exist
            LIBDIR/lint[12]         first and second passes
            LIBDIR/llib-lc.ln       declarations for C Library functions
                                    (binary format; source is in
                                    LIBDIR/llib-lc)
            LIBPATH/llib-lm.ln      declarations for Math Library
                                    functions (binary format; source is in
                                    LIBDIR/llib-lm)
            TMPDIR/*lint*           temporaries
            TMPDIR                  usually /var/tmp but can be redefined
                                    by setting the environment variable
                                    TMPDIR [see tempnam in tmpnam(3S)].
            LIBDIR                  usually /ccs/lib
            LIBPATH                 usually /usr/ccs/lib:/usr/lib

      REFERENCES
            cc(1), make(1)


























                          Copyright 1994 Novell, Inc.               Page 6








Typewritten Software • bear@typewritten.org • Edmonds, WA 98026