Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lint(1) — A/UX 0.7

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

cpp(1)

make(1)



     lint(1)                                                   lint(1)



     NAME
          lint - a C program checker

     SYNOPSIS
          lint [-a] [-b] [-c] [-Dname[=def]] [-h] [-Idir] [-lx] [-n]
          [-o lib] [-p] [-u] [-Uname] [-v] [-x] ... 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 flag 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
          flag option is used, the portable C lint library (llib-
          port.ln) is appended instead.  When the -c flag option is
          not used, the second pass of lint checks this list of files
          for mutual compatibility.  When the -c flag option is used,
          the .ln and the llib-lx.ln files are ignored.

          Any number of lint flag options may be used, in any order,
          intermixed with file-name arguments.  The following flag
          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.




     Page 1                                        (last mod. 1/16/87)





     lint(1)                                                   lint(1)



          -u      Suppress complaints about functions and external
                  variables used and not defined, or defined and not
                  used.  (This flag 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 flag option can be used
                  to reference local lint libraries and is useful in
                  the development of multi-file projects.  To generate
                  llib-lX.ln from llib-lX, use:

                  cc -E -C -Dlint llib-lX | /usr/lib/lint1 -vx
                  -H/tmp/lint$$ > llib-1X.1n
                   rm -f /tmp/lint$$


          -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 flag option nullifies any use
                  of the -o flag option.  The lint library produced is
                  the input that is given to lint's second pass.  The
                  -o flag 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
                  flag option is suggested.  The -v flag option is
                  useful if the source file(s) for the lint library
                  are just external interfaces (for example, the way



     Page 2                                        (last mod. 1/16/87)





     lint(1)                                                   lint(1)



                  the file llib-lc is written).  These flag option
                  settings are also available through the use of lint
                  comments (see below).

          The -D, -U, and -I flag options of cpp(1) and the -g and -O
          flag options of cc(1) are also recognized as separate
          arguments.  The -g and -O flag options are ignored, but, by
          recognizing these flag options, lint's behavior is closer to
          that of the cc(1) command.  Other flag 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 flag 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 flag 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 flag 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 flag 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 flag option.  Each of these invocations produces a
          .ln file which corresponds to the .c file, and prints all



     Page 3                                        (last mod. 1/16/87)





     lint(1)                                                   lint(1)



          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 flag option), listing
          all the .ln files with the needed -lx flag 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.

     EXAMPLE
               lint -b myfile.c

          checks the consistency of the file myfile.c.  The -b flag
          option indicates that unreachable break statements are not
          to be checked.  This flag option might well be used on files
          that lex(1) generates.

     FILES
          /usr/bin/lint

          /usr/lib           the directory where the lint libraries
                             specified by the -lx flag 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.l declarations for Math Library functions
                             (binary format; source is in
                             /usr/lib/llib-l

     temporaries


     SEE ALSO
          cc(1), cpp(1), make(1),
          ``lint Reference'' in Oreo Programming Languages and Tools,
          Volume 1.

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




     Page 4                                        (last mod. 1/16/87)



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