Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

cpp(1)

make(1)

lint(1)  —  RISC

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 errors, nonportable, 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 locate functions that return values in some places, but 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 interpreted as C source files. Arguments whose names end with .ln interpreted as 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 command when given a .c file as input.  Files with other suffixes are warned about and ignored.

The lint command takes all the .c, .ln, and llib-lx.ln (specified by −lx) files and processes them in their command line order.  By default, the lint command 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.

Options

Any number of lint options may be used, in any order, intermixed with filename arguments. The following options are used to suppress certain kinds of warning:

−a Suppress warnings about assignments of long values to variables that are not long. 

−b Suppress warnings about break statements that cannot be reached.  (Programs produced by lex or yacc often result in such warnings).

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

−u Suppress warnings about functions and external variables used and not defined, or defined and not used.  (This option is suitable when 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 the behavior of lint.

−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. The .ln files are the product of the lint command’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 the second pass lint. 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 files 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 which are described later.

The −D, −U, and −I options of cpp and the −g and −O options of cc are also recognized as separate arguments. The −g and −O options are ignored, but, by recognizing these options, the behavior of lint is closer to that of the cc command’s second pass.  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.

The lint command produces its first output on a per-source-file basis. Warnings 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 warning stems from a given source file or from one of its included files, the source file name is 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 prints 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 modified since the last time the set of source files were checked by lint.

Restrictions

The system call exit, the function longjmp, and other functions that do not return a value are not interpreted correctly by the lint command.

Certain conventional comments in the C source 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).

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

Files

/usr/lib/cmplrs/cc/lint
the directory where the lint libraries specified by the −lx option must exist

/usr/lib/cmplrs/cc/lint[12]
first and second passes

/usr/lib/cmplrs/cc/lint/llib-lc.ln
declarations for C Library functions (binary format; source is in /usr/lib/cmplrs/cc/lint/llib-lc)

/usr/lib/cmplrs/cc/lint/llib-lcV.ln
System V declarations for standard functions

/usr/lib/cmplrs/cc/lint/llib-lcP.ln
POSIX declarations for standard functions

/usr/lib/cmplrs/cc/lint/llib-port.ln
declarations for portable functions (binary format; source is in /usr/lib/cmplrs/cc/lint/llib-port)

/usr/lib/cmplrs/cc/lint/llib-lm.ln
declarations for Math Library functions (binary format; source is in /usr/lib/cmplrs/cc/lint/llib-lm)

/usr/tmp/∗lint∗ temporaries
 

See Also

cc(1), cpp(1), make(1). 

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