Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ alint(1) — SPARCworks 2.0.1

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

cc(1)

make(1)

lint(1)  —  USER COMMANDS

NAME

lint − a C program checker
alint (for SunOS 4.x)

SYNOPSIS

lint [ −a ] [ −b ] [ −Cfilename ] [ −c ] [ −F ] [ −h ] [ −Idir ] [ −k ] [ −Ldir ]

[ −lx ] [ −m ] [ −n ] [ −Ox ] [ −p ] [ −Rfile ] [ −s ] [ −u ] [ −V ] [ −v ] [ −Wfile ]

[ −x ] [ −y ] files

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

Arguments whose names end with .c are taken to be C source files; arguments ending in .i are taken to be preprocessor output files (produced with the −P option to the compiler); and arguments ending in .s are taken to be assembler files (created with the −S option to the compiler).  Arguments whose names end with .ln are taken to be the result of an earlier invocation of lint with either the −C, −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, .i, .s, .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 or −c option is used, the .ln and the llib-lx.ln files are ignored.  When the −C or −c option is not used, the second pass of lint checks the .ln and the llib-lx.ln list of files for mutual compatibility. 

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. 

−Cfilename
Produce a .ln file with the filename specified by filename .  These .ln files are the product of lint ’s first pass only.  filename can be a complete pathname. 

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

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

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

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

−k Alter the behavior of /∗LINTED [message]∗/ directives.  Normally, lint suppresses warning messages for the code following these directives.  Instead of suppressing the messages, lint prints an additional message containing the comment inside the directive. 

−Ldir Search for lint libraries in dir before searching 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. 

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

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

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

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

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

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

−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 Write to standard error the product name and release. 

−v Suppress complaints about unused arguments in functions. 

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

−x Do not report variables referred to by external declarations but never used. 
The following arguments alter lint’s behavior:

−y Specify that the file being linted be treated as if the ­/∗LINTLIBRARY∗/ directive had been used.  A lint library is normally created by using the /∗LINT­LIBRARY∗/ directive. 

lint recognizes many cc(1) command line options, including −D, −U, −g, −O, −Xt, −Xa, −Xs, 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. 

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

/∗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 are 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 or −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 is printed followed by a question mark. 

The behavior of the −C, −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 or −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 or −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 linted. 

FILES

lint[12] first and second passes

llib-lc.ln declarations for C Library functions (binary format) (SunOS 5.0)

llib-lansi.ln declarations for C Library functions (binary format) (SunOS 4.x)

TMPDIR/∗lint∗ temporaries

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

SEE ALSO

cc(1), make(1)
See the lint chapter in Programming Tools.

Sun Release 4.1  —  Last change: 7 June 1991

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