Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lint(1) — NEWS-os 5.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

cpp(1)

make(1)



lint(1)                  USER COMMANDS                    lint(1)



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



                                                                1





lint(1)                  USER COMMANDS                    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  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.

     -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 cc(1) are also recognized as separate arguments.
     The -g and -O options are ignored, but, by recognizing these



                                                                2





lint(1)                  USER COMMANDS                    lint(1)



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



                                                                3





lint(1)                  USER COMMANDS                    lint(1)



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

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  func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-lm)
     /usr/lib/llib-lcrypt.ln
                            declarations for Crypt Library  func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-lcrypt)
     /usr/lib/llib-lcurses.ln
                            declarations for Curses Library func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-lcurses)
     /usr/lib/llib-lgen.ln  declarations  for  general  functions
                            (binary    format;   source   is   in
                            /usr/lib/llib-lgen)
     /usr/lib/llib-ll.ln    declarations for  Lex  Library  func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-ll)
     /usr/lib/llib-ly.ln    declarations for Yacc  Library  func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-ly)
     /usr/lib/llib-lmalloc.ln
                            declarations for Malloc Library func-
                            tions  (binary  format;  source is in
                            /usr/lib/llib-lmalloc)
     /usr/tmp/*lint*        temporaries

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.









                                                                4



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