lint
索引:
1.基本命令行选项
-o:为.c文件创建相关消息文件.ln;
-F:打印.c文件在命令行提供的全名,而不只是使用基本文件名;
-Idir:在目录dir中搜索包含的头文件;
-k:与指令/* LINTED [msg] */一起使用时,打印info:msg;
-lx:访问lint库llib-lx.ln;
-Ldir:在目录dir下搜索lint库;
-n:抑制检查与lint标准C库的兼容性;
-ox:创建文件llib-lx.ln,该文件将命令行中列出的.c文件中与第二步相关的消息记录下来。通常与选项-y或指令/* LINTLIBRARY */一起使用来创建lint库;
-s:将复合消息转换为简单消息;
-y:将命令行中列出的每个.c文件当成以/* LINTLIBRARY */开头的文件来处理。
-V:将产品名称和版本输出到标准错误中。
2.抑制特定消息选项
-a抑制:
assignment causes implicit narrowing conversion
conversion to larger integeral type may sign-extend incorrectly
-b对于不可达到的break和空语句抑制:
statement not reached
-h抑制:
assignment operator “=” found where equality operator “==” was expected
constant operand to op:”!”
fallthrough on case statement
pointer cast may result in improper alignment
precedence cnofusion possible; parenthesize
statement has no consequent: if
statement has no consequent: else
-m抑制:
declared global,could be static
-u抑制:
name defined but never used
name used but not defined
-v抑制:
argument unused in function.
-x抑制:
name declared but never used or defined.
3.启动特定消息的选项
-p启动:
conversion to larger integral type may sign-extend incorrectly
may be indistinguishable due to truncation or case
pointer casts may be troublesome
nonportable bit-field type
suspicious comparison of char with value:op “op”
-Xc检查不符合ANSI C标准的代码,启动:
bitwise operation on signed value nonportable
function must return int:main()
may be indistinguishable due to truncation or case
only 0 or 2 parameters allowed:main()
nonportable character constant
4.抑制指令
/* ARGSUSEDn */
对其后函数定义中除前n个参数以外所有的参数(n默认为0)抑制消息:
argument unused in function.
/* CONSTCOND */
也可写作/* CONSTANTCONDITION */,对于其后的结构抑制:
constant in conditional context.
constant operand to op:”!”.
logical expression always false:op “&&”.
logical expression always true:op “||”.
/* EMPTY */
当插入在else和分号之间时抑制:
statement has no consequent: else.
当插入在if的控制表达式和分号之间时,抑制:
statement has no consequent:if.
/* FALLTHRU */
也可写作/* FALLTHRUOUGH */,对于其后的case语句抑制:
fallthrough on case statement.
/* LINTED [msg] */
当不使用-k选项时,对于其后的代码行,抑制除如下消息以外的所有属于文件内部的警告消息:
argument unused in function
declaration unused in block
set but not used in function
static unused
variable unused in function
对其处理的代码行msg被忽略。
/* LINTLIBRARY */
当使用-o选项时,将把以此命令为开头的.c文件中的定义写入库文件.ln中。
/* NOTREACHED */
对于其后的不可达语句抑制:
statement not reached.
对于其后的不可达情况抑制:
fallthrough on case statement.
对于其后的函数末尾的花括号抑制:
function falls off bottom without returning value.
/* PRINTFLIKEn */
将其后的函数定义中的第n个参数当作[fs]printf()格式字符串来处理。如果该参数进行不规则转换则产生消息:
malformed format string.
如果在剩余参数和转换规则之间不匹配产生消息:
function argument type inconsistent with format.
too few arguments for format.
too many arguments for format.
/* PROTOLIBn */
当n为1且使用了/* LINTLIBRARY */时,将其后的.c文件中的函数原型声明写入库中,n默认为0,忽略该操作。
/* SCANFLIKEn */
与/* PRINTFLIKEn */类似,只不过函数定义中第n个参数被当作[fs]scanf()格式字符串来处理。
/* VARARGSn */
对于其后定义的函数,如果调用时使用n个或更多个的参数时抑制:
function called with variable number of arguments.
5.lint库
使用lint库:
lint -lx files; lint -Ldir -lx files;
创建lint库:
lint -ox files;(要求文件以/* LINTLIBRARY */开头) 或 lint -y -ox files;