107 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
.NH 1
 | 
						|
How to make lint shut up
 | 
						|
.PP
 | 
						|
It can be very annoying having
 | 
						|
.I lint
 | 
						|
warn about questionable constructs of which the programmer already is
 | 
						|
aware.
 | 
						|
There should be a mechanism to give 
 | 
						|
.I lint
 | 
						|
some extra information in the source code.
 | 
						|
This could be done by introducing some special keywords, which
 | 
						|
would have a special meaning to
 | 
						|
.I lint.
 | 
						|
This is a bad solution, because these keywords would cause existing
 | 
						|
C compilers not to work on these programs.
 | 
						|
A neater solution is to invent some comments having a special
 | 
						|
meaning to 
 | 
						|
.I lint.
 | 
						|
We call these comments 
 | 
						|
.I pseudocomments.
 | 
						|
The pseudocomments have no meaning to existing C compilers, so
 | 
						|
compilers will not have to be rewritten for C programs containing
 | 
						|
the previously proposed special keywords.
 | 
						|
The following pseudocomments are recognized by 
 | 
						|
.I lint.
 | 
						|
.LP
 | 
						|
\f(CW/* VARARGS\fIn\fP */\fR
 | 
						|
.br
 | 
						|
.in 5
 | 
						|
The next function can be called with a variable number of arguments.
 | 
						|
Only check the first \fIn\fP arguments.
 | 
						|
The \fIn\fP must follow the word \f(CWVARARGS\fP immediately.
 | 
						|
This pseudocomment is useful for functions like e.g. printf.
 | 
						|
(The definition of the function printf should be preceded by
 | 
						|
\f(CW/*\ VARARGS1\ */\fP.)
 | 
						|
.in
 | 
						|
.LP
 | 
						|
\f(CW/* VARARGS */\fP
 | 
						|
.br
 | 
						|
.in 5
 | 
						|
Means the same as \f(CW/* VARARGS0 */\fP.
 | 
						|
.in
 | 
						|
.LP
 | 
						|
\f(CW/* ARGSUSED */\fP
 | 
						|
.br
 | 
						|
.in 5
 | 
						|
Don't complain about unused arguments in the next function.
 | 
						|
When we are developing a program we sometimes write functions of
 | 
						|
which we do not yet use the arguments.
 | 
						|
Because we do want to use
 | 
						|
.I lint
 | 
						|
on these programs, it is nice to have this pseudocomment.
 | 
						|
.in
 | 
						|
.LP
 | 
						|
\f(CW/* NOTREACHED */\fP
 | 
						|
.br
 | 
						|
.in 5
 | 
						|
.I Lint
 | 
						|
makes no attempt to discover functions which never return,
 | 
						|
although it \fIis\fP possible to find functions that don't return.
 | 
						|
This would require a transitive closure with respect to the already
 | 
						|
known \fInot-returning\fP functions; an inacceptable time consuming
 | 
						|
process.
 | 
						|
To make 
 | 
						|
.I lint
 | 
						|
aware of a function that doesn't return, a call of this function
 | 
						|
should be followed by the pseudocomment \f(CW/*\ NOTREACHED\ */\fP.
 | 
						|
This pseudocomment can also be used to indicate that some case part
 | 
						|
inside a switch (especially a default part) can't be reached.
 | 
						|
The above mentioned cases of use of this pseudocomment are
 | 
						|
examples. 
 | 
						|
The comment can be used just to indicate that some part of the
 | 
						|
program can't be reached.
 | 
						|
It sometimes is necessary to introduce an extra compound statement
 | 
						|
to get the right effect. 
 | 
						|
See figure 9.
 | 
						|
.KF
 | 
						|
.DS B
 | 
						|
.ft CW
 | 
						|
        if (cond)
 | 
						|
                /* if part */ ;
 | 
						|
        else {
 | 
						|
                error();  /* doesn't return */
 | 
						|
                /* NOTREACHED */
 | 
						|
        }
 | 
						|
/* Without  the compound  else  part, lint  would  assume
 | 
						|
 * the statement after the if statement to be NOTREACHED,
 | 
						|
 * instead of the end of the else part.
 | 
						|
 */
 | 
						|
.I
 | 
						|
.DE
 | 
						|
.ce
 | 
						|
figure\ 9.
 | 
						|
.R
 | 
						|
.KE
 | 
						|
.in
 | 
						|
.LP
 | 
						|
\f(CW/* LINTLIBRARY */\fP
 | 
						|
.br
 | 
						|
.in 5
 | 
						|
All definitions following this comment are assumed to be library
 | 
						|
definitions.
 | 
						|
It shuts off complaints about unused functions and variables.
 | 
						|
See also section 4.2.7 for how to use this comment for generating
 | 
						|
lint libraries.
 | 
						|
.in
 | 
						|
.bp
 |