LINT(1V)

NAME
lint - a C program verifier

SYNOPSIS
lint [ -abchinquvxz ] [ -Dname[=def] ] [ -host=arch ]
[ -Idirectory ] [ -llibrary ] [ -o outputfile ] [ -target=arch ] [ -Uname ] filename ...
lint [ -Clibrary ] [ -Dname[=def] ]
[ -host=arch ] [ -Idirectory ] [ -llibrary ] [ -target=arch ] [ -Uname ] filename ...

SYSTEM V SYNOPSIS
/usr/5bin/lint [ -abcghnpquvxzO ] [ -Dname[=def] ]
[ -Idirectory ] [ -llibrary ] [ -o outputfile ] [ -Uname ] filename ...

AVAILABILITY
The System V version of this command is available with the System V software installation option. Refer to for information on how to install optional software.

DESCRIPTION

lint attempts to detect features of the named C program files that are likely to be bugs, to be non-portable, or to be wasteful. It also performs stricter type checking than does the C compiler. lint runs the C preprocessor as its first phase, with the preprocessor symbol lint defined to allow certain questionable code to be altered or skipped by lint. Therefore, this symbol should be thought of as a reserved word for all code that is to be checked by lint.

Among the possible problems that are currently noted are unreachable statements, loops not entered at the top, automatic variables declared and not used, and logical expressions with constant values. Function calls are checked for inconsistencies, such as calls to functions that return values in some places and not in others, functions called with varying numbers of arguments, function calls that pass arguments of a type other than the type the function expects to receive, functions whose values are not used, and calls to functions not returning values that use the non-existent return value of the function.

Filename arguments ending with .c are taken to be C source files. Filename arguments with names ending with .ln are taken to be the result of an earlier invocation of lint, with either the -i or the -C option in effect. The .ln files are analogous to the .o (object) files produced by the cc(1V) from .c files. lint also accepts special libraries specified with the -l option, which contain simplified definitions of standard library routines (preprocessed by `lint -C') for faster checking of function calls.

lint processes the various .c, .ln, and llib-llibrary.ln (lint library) files and process them in 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 and -i options are omitted the second pass of lint checks this list of files for mutual compatibility. When the -C or the -i options are used, the .ln and the llib-llibrary.ln files are ignored.

SYSTEM V DESCRIPTION
Filename arguments with names ending with .ln are taken to be the result of an earlier invocation of lint, with either the -c or the -o option in effect.

lint processes the various .c, .ln, and llib-llibrary.ln (lint library) files and process them in 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 omitted the second pass of lint checks this list of files for mutual compatibility. When the -c option is used, the .ln and the llib-llibrary.ln files are ignored.

lint produces its first-pass output on a per-source-file basis. Complaints regarding included files are collected and printed after all source files have been processed. If the -c option is not used, information gathered from all input files is then 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 is printed, followed by a question mark.

OPTIONS

-a  Report assignments of long values to variables that are not long.

-b  Report break statements that cannot be reached. This is not the default because, unfortunately, most lex(1) and many yacc(1) outputs produce many such complaints.

-c  Complain about casts which have questionable portability.

-h  Apply a number of heuristic tests to attempt to intuit bugs, improve style, and reduce waste.

-i  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 compatibility between functions.

-n  Do not check compatibility against the standard library.

-q  Do not complain about constructs that do not cause portability problems between current Sun implementations of the C language but that will cause portability problems between other implementations. If the -q flag is specified, lint treats type enum as an int, treats type long as type int and type unsigned long as unsigned int, and treats a 0 argument as being conformable with any pointer.

-u  Do not complain about functions and external variables used and not defined, or defined and not used (this is suitable for running lint on a subset of files comprising part of a larger program).

-v  Suppress complaints about unused arguments in functions.

-x  Report variables referred to by extern declarations, but never used.

-z  Do not complain about structures that are never defined (for example, using a structure pointer without knowing its contents).

-Clibrary
    Create a lint library with the name llib-llibrary.ln.

-Dname[=def]
    Define name for cpp(1), as if by a #define directive. If no definition is given, name is defined as 1.

-host=arch	(Sun-2, Sun-3, and Sun-4 systems only)
    Define the host architecture to be arch. The default is the architecture returned by the arch(1) command. arch can be one of sun2, sun3, or sun4.

-Idirectory
    Add directory to the list of list of directories in which to search for include files. Include files with names that do not begin with / are always sought first in the directory of the filename argument, then in directories named in -I options, then in the /usr/include directory.

-llibrary
    Use the lint library library from the /usr/lib/lint directory.

-o outputfile
    Name the output file outputfile. outputfile cannot be the same as sourcefile (lint will not overwrite the source file).

-target=arch	(Sun-2, Sun-3, and Sun-4 systems only)
    Define the target architecture to be arch, for additional portability checks specific to that architecture. The default is the value returned by the arch(1) command. arch can be one of: sun2, sun3, or sun4.

-Uname
    Remove any initial definition of name for the preprocessor.

SYSTEM V OPTIONS
The sense of the -a, -b, -h, and -x options is reversed in the System V version of lint; the tests they control are performed unless the flag is specified. The -C option is not available; instead, the -c or -o options can be used. The -i option is not used; instead, the -c option can be used. The -q, -host, and -target options are not available.

-c  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 compatibility between functions.

-g
-O  These options are accepted but ignored. By recognizing these options, lint's behavior is closer to that of the cc(1V) command.

-n  Do not check compatibility against either the standard or the portable lint library.

-p  Attempt to check portability of code to other dialects of C, such as IBM 370 and Honeywell GCOS. Along with performing stricter checking, this option truncates all non-external names to eight characters, and all external names to six characters and one case.

-o library
    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 saves this file 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 Input Grammar below).

USAGE

For more information about lint refer to lint in

To create lint libraries, use the -C option. For example

    example% lint -Ccongress filenames ...

where filenames are the C sources of library congress, produces a file llib-lcongress.ln in the current directory in the correct library format suitable for “linting” programs using -lcongress.

  Input Grammar

lint's first pass reads standard C source files. lint recognizes the following C comments as commands.

/*NOTREACHED*/
    At appropriate points, inhibit comments about unreachable code. (This comment is typically placed just after calls to functions like exit(2V)).

/*VARARGSn*/
    Suppress 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. In this version of lint, /*VARARGS0*/ is allowed. It no longer indicates the absence of variable arguments.

/*ARGSUSED*/
    Enable the -v option for the next function.

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

SYSTEM V USAGE

The behavior of the -c and the -o options allows for incremental use of lint on a set of C source files. Invoking `lint -c' for each source file produces a corresponding .ln file, and prints all messages pertaining to that source file. After all of the source files have been run through lint separately, it is invoked once more (without the -c option), and with all of the .ln files and -lx options. This produces messages about any inconsistencies between files. This scheme works well with make(1), since it allows make to “lint” only those source files that have been modified since the last time lint was run.

To create lint libraries, use the -o option. For example

    example% lint -x -o congress filenames ...

where filenames are the C sources of library congress, produces a file llib-lcongress.ln in the current directory in the correct library format suitable for “linting” programs using -lcongress.

EXAMPLE
The following lint call:

    example% lint -b myfile.c

checks the consistency of the code in the C source file file myfile.c. The -b option indicates that unreachable break statements are to be checked for.

FILES
/usr/lib/lint/lint[12]
    programs
/usr/lib/lint/llib-l*.ln
    various prebuilt lint libraries
/usr/lib/lint/llib-l*
    sources of the prebuilt lint libraries

The following lint libraries are supplied with SunOS: -lc, -lcore, -lcurses, -lkvm, -llwp, -lm, -lmp, -lpixrect, -lplot, -lsuntool, -lsunwindow, -ltermcap, and -ltermlib. Additional lint libraries may be installed separately.

SYSTEM V FILES
/usr/5lib/lint/lint[12]
    programs
/usr/5lib/lint/llib-l*.ln
    various prebuilt lint libraries
/usr/5lib/lint/llib-l*
    sources of the prebuilt lint libraries

The following System V lint libraries are supplied with SunOS: -lc, -lcore, -lcurses, -lkvm, -llwp, -lm, -lmp, -lpixrect, -lplot, -lport. -lsuntool, and -lsunwindow. Additional lint libraries may be installed separately.

SEE ALSO
cc(1V), cpp(1), lex(1), make(1), yacc(1), exit(2V), setjmp(3V), ansic(7V), bsd(7V), posix(7V), sunos(7), svidii(7V), svidiii(7V), xopen(7V)

NOTES
Because cc does not generate or support 8-bit symbol names, it is inappropriate to make lint 8-bit clean. See cc(1V) for an explanation about why cc is not 8-bit clean.

BUGS
There are some things you just cannot get lint to shut up about.

The routines exit(2V), longjmp (see setjmp(3V)) and other functions that do not return are not understood; this causes various incorrect diagnostics.

Libraries created by the -C or -o options will, when used in later lint runs, cause certain errors that were reported when the libraries were created to be reported again, and cause line numbers and file names from the original source used to create those libraries to be reported in error messages. For these reasons, it is still useful to produce stripped down lint library source files and to use them to generate lint libraries.