Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ lint(CP) — OpenDesktop Software Development System 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(CP)

cpp(CP)

make(CP)


 lint(CP)                       6 January 1993                       lint(CP)


 Name

    lint - a C program checker

 Syntax

    lint [ option ] ... file ...

 Description

    The lint command 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, func-
    tions called with varying numbers or types of arguments, and functions
    whose values are not used or whose values are used but none returned.

    lint is based on the Microsoft compiler cc.  It is capable of understand-
    ing both ANSI and Microsoft syntax.  To check programs written for the
    AT&T compiler rcc, use the rlint command (see the rlint(CP) manual page).

    Arguments whose names end with .c are taken to be C source files.  Argu-
    ments 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(CP)
    command when given a .c file as input.  Files with other suffixes are
    warned about and ignored.

    The lint command 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 compa-
    tibility.  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 com-
        plaints.)

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

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

    -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 port-
        able lint library.

    -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 pro-
        duced 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 llib-lc is written).  These option settings are also available
        through the use of ``lint comments'' (see below).

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

    The -D, -U, and -I options of cpp(CP) and the -g and -O options of cc(CP)
    are also recognized as separate arguments.  The -g and -O options are
    ignored, but, by recognizing these options, lint's behavior is closer to
    that of the cc(CP) command.  Other options are warned about and ignored.

    The symbols ``__lint'' and ``lint'' should be thought of as reserved
    words for all code that you plan to check with lint.  The default prepro-
    cessor symbol ``__lint'' is defined to allow certain questionable code to
    be altered or removed for lint.  The preprocessor symbol ``lint'' is also
    currently defined to allow backward compatibility.

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

       /*ARGSUSED*/
          Turns on the -v option for the next function.

       /*LINTLIBRARY*/
          Placed at the beginning of a file turns off complaints about unused
          functions and function arguments in this file.  This is equivalent
          to using the -v and -x options.

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

       /*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 lint command 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 for each .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
    interfile inconsistencies.  This scheme works well with make(CP); it
    allows make to be used to lint only the source files that have been modi-
    fied since the last time the set of source files were linted.

 Files


    LLIBDIR               The directory where the lint libraries specified by
                          the -lx option must exist, usually /usr/lib.

    LLIBDIR/lint[12]      First and second passes.

    LLIBDIR/llib-lc.ln    Declarations for C Library functions (binary for-
                          mat; source is in LLIBDIR/llib-lc).

    LLIBDIR/llib-port.ln  Declarations for portable functions (binary format;
                          source is in LLIBDIR/llib-port).

    LLIBDIR/llib-lm.ln    Declarations for Math Library functions (binary
                          format; source is in LLIBDIR/llib-lm).

    TMPDIR/*lint*         Temporary files.

    TMPDIR                Usually /usr/tmp but can be redefined by setting
                          the environment variable TMPDIR (see tempnam() in
                          tmpnam(S)).

 Notes

    exit(S), setjmp(S), and other functions that do not return are not under-
    stood; this causes various incorrect warnings.

 See also

    cc(CP), cpp(CP), make(CP)

 Standards conformance

    lint is conformant with:
    AT&T SVID Issue 2;
    and X/Open Portability Guide, Issue 3, 1989.


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