[ 页的底部 | 上一页 | 下一页 | 目录 | 索引 |
法律条款
]
AIX命令参考大全,卷 3,i - m
lint 命令
用途
检查 C 和 C++ 编程语言以查找潜在的问题。
语法
lint [ -a ] [ -b ]
[ -c ] [ -C ] [ -h ] [ -lKey ] [ -n ] [ -oLibrary ] [ -qDBCS ] [ -p ] [ -t
] [ -u ] [ -v ] [ -w Class [Class
... ] ] [ -x ] [ -MA ] [ -NdNumber ] [ -NlNumber ] [ -NnNumber ] [ -NtNumber ] [ -IDirectory ] [ -DName [=Definition ] ] [ -UName ] File ...
描述
lint 命令查找 C 和
C++ 语言的源代码的编码错误、语法错误以及效率低或不可移植的代码。
可以使用此程序:
- 识别源代码和库的不兼容。
- 比编译器更严格地执行类型检查规则。
- 识别变量中潜在的问题。
- 识别函数中潜在的问题。
- 识别流量控制中的问题。
- 识别可能会生成错误或效率低下的合法语句。
- 识别不使用的变量和函数声明。
- 识别可能的不可移植代码。
注意:使用 lint 命令检查 C++ 语言文件需要有 C Set++ 编译器的软件包。
检查函数的文件内使用,以查找在一些实例中返回值,而在其他实例中不返回值的函数、
调用时参数数量和类型会变化的函数以及其值没有被使用,或其值被使用了,但没有返回值的函数。
lint 命令按如下解释文件名的扩展名:
- File 名以 .c 结尾的为 C 语言源文件。
- File 名以 .C 结尾的为 C++ 语言源文件。
- File 名以.ln 结尾的
是当使用了 -c 或 -o 标志的时候,lint 命令生成的非 ASCII 文件。
lint 命令会警告其他后缀的文件并忽略它们。
lint 命令获取所有的由 -l 标志指定的 .c、.C 以及 .ln
文件和库,并以它们在命令行上出现的顺序处理。
缺省情况下,将标准 llib-lc.ln lint 库添加到文件列表的结尾部分。
然而,当选择了 -p 标志的时候,
lint 命令使用 llib-port.ln 可移植库。缺省情况下,lint 的第二遍检查此列表中的文件的相互兼容性;然而,如果指定了 -c 标志,那么会忽略 .ln 和
llib-lx.ln 文件。
-c 和 -o 标志允许对 C 和 C++ 语言源文件集中增量使用 lint 命令。
通常对每个源文件使用一次带有 -c 标志的 lint 命令。
每次运行都会生成一个对应于 .c 文件的 .ln 文件,并
写出关于该源文件的所有信息。
当对所有文件单独使用了 lint 命令后,再不带-c 标
志运行一次,使用需要的 -l 标志列出所有的 .ln 文件。这会写出所有的文件内部的不一致。
此过程与 make 命令工作得很
好,允许其仅对那些自从上次检查过该源文件集合后又修改过的源文件运行 lint 命令。
lint 和 LINT 预处理器符号定义是为允许 lint 命令修改或删除某些可能有问题的代码而定义的。
因此,lint 和 LINT 符号应该被看作为
计划被 lint 检查的所有代码的一个保留字符。
以下 C 和 C++ 语言源程序中的注释改变了
lint 命令在检查源程序的时候的操作方式:
/*NOTREACHED*/ |
禁止关于无法访问代码的注释。 |
/*VARARGSNumber*/ |
禁止检查以下旧样式函数声明中的可变数量的参数,但是
仍检查第一个 Number 参数的数据类型。如果没有为 Number 包含一个值,那么 lint 命令不会检查
参数(Number=0)。ANSI 函数原型应该使用省略号来表示
未指定的参数以取代此注释机制。 |
/*ARGSUSED*/ |
禁止关于函数参数在函数定义中未使用的警告。 |
/*LINTLIBRARY*/ |
如果将此注释放置在文件的开头,那么 lint 命令不会识别此文件中的不使用的函数和函数参数。
这在对库运行 lint 命令的时候使用。 |
/*NOTUSED*/ |
在文件中,从它出现的地方开始禁止关于不使用的外部符号、函数和函数参数的警告。
这是 /*LINTLIBRARY*/ 注释伪指令的超集,但是也应用于外部符号。
它对于禁止关于不使用的函数原型和其他的外部对象声明的警告是有用的。 |
/*NOTDEFINED*/ |
在文件中,从它出现的地方开始禁止关于被使用了但是未经定义的外部符号和函数的警告。 |
/*LINTSTDLIB*/ |
通过使得函数原型声明看起来像函数声明来允许从头文件生成标准原型检查库。
该伪指令暗中激活 /*NOTUSED*/ 和 /*LINTLIBRARY*/ 注释伪指令,以
减少警告噪声级别。 |
lint 命令警告信息给出了
文件名和行号。在每个文件经受第一遍检查的时候报告了每个文件和每个行号的警告信息。
如果没有指定 -c
标志,lint 命令会收集从所有输入文件中收集到的信息,然后检查其一致性。
在这一点,如果不清楚某条信息是起源于给定的源文件还是起源于它的一个包含文件,
那么,lint 命令会在显示的源文件名后跟上一个问号。
包含了许多标准头文件的 ANSI 程序可能希望设置 -wD 标志
以减少关于原型未使用的警告的数量,并设置 -n 标志
以禁用 ANSI 标准库进行检查。对于非 ANSI 的程序,建议
指定 -wk 标志来减少
关于函数原型不存在的警告数量。
标志
-a |
禁止关于将长值赋值给不够长的变量的信息。 |
-b |
禁止关于无法访问 break 语句的信息。 |
-c |
促使 lint 命令在命令行上为每个 .c 文件生成 .ln 文件。
这些.ln 文件仅仅是 lint 命令第一遍的产品,
不会检查其内部函数的兼容性。 |
-C |
指定使用 C++ 库(在 /usr/lpp//xlC/lib 目录中)。 |
-h |
不尝试检测错误、不正确的风格或减少浪费。 |
-lKey |
包含额外的 llib-lKey.ln lint 库。可以通过在命令行上指定 -lm 来
包含 llib-lm.ln 数学库的 lint 版本,或者在命令行上指定 -ldos 标志
来包含 llib-ldos.ln 库。
当检查作为有大量文件的项目中的部分文件时,使用此标志来包含本地 lint 库。
此标志并不禁止 lint 命令使用 llib-lc.ln 库。lint 库必须位于 /usr/ccs/lib 目录中。 |
-n |
禁止使用或者标准或者可移植 lint 库来检查兼容性。
这同时适用于 ANSI 和扩展方式库。 |
-oLibrary |
促使 lint 命令创建 llib-lLibrary.ln lint 库。
-c 标志使任何 -o 标志使用无效。生成的 lint 库是第二遍 lint 命令的输入。-o 标志仅导致此文件存储在指定的 lint 库中。
为了生成不带有外部消息的 llib-lLibrary.ln,使用 -x 标志。如果 lint 库的源文件只是外部接口(例如,写入 llib-lc 文件的方式),那么 -v 标志是有用的。
通过使用 lint 命令注释行,这些标志设置也是可用的。 |
-p |
检查对其他 C 语言方言的可移植性。 |
-t |
当从 32 位移植到 64 位的时候,检查有问题的赋值。
仅检查下列情况:
- 标出所有的 shift / mask 操作,因为有些在 32 位下工作正常的操作在 64 位下可能会导致问题。
- 对以下类型的赋值给出警告。
int = long
int = ptr |
-u |
禁止关于未经定义而使用或定义但未使用的函数和外部变量的消息。
使用此标志对一个较大的程序的文件子集运行 lint 命令。 |
-v |
禁止函数参数未使用的信息。 |
-w Class[Class...] |
控制警告类的报告。缺省情况下,所有的警告类是活动的,但是
可以通过包括适当的选项作为 Class 参数的一部分来逐个取消激活。
单独选项列出为:
-
a
- 非 ANSI 特征。
-
c
- 与无符号值比较。
-
d
- 声明一致性。
-
h
- 探索性方法申诉。
-
k
- 用于 K+R 类型的源代码。
-
l
- 将长值赋值给不够长的变量。
-
n
- 无效代码。
-
o
- 未知的求值顺序。
-
p
- 涉及不同的可移植性。
-
r
- 返回语句一致性。
-
s
- 存储容量检查。
-
u
- 变量和函数的正确使用。
-
A
- 取消激活所有的警告。
-
C
- 有条件出现的常量。
-
D
- 外部声明未使用。
-
O
- 将被废弃的特征。
-
P
- 函数原型存在。
-
R
- 检测到无法访问的代码。
|
-x |
禁止关于有外部声明,但是从未使用的变量的消息。 |
-MA |
强制执行 ANSI C 语言标准规则。缺省方式为扩展 C 方式。
ANSI 方式预先设置标准 ANSI 库函数原型来代替缺省的 C 扩展方式 lint 库。
ANSI 方式强制执行了更严格的内部文件对象参考并提供了
定义链接检查。 |
-NdNumber |
将表的维大小更改为 Number。Number 的缺省值为 2000。 |
-NlNumber |
将类型节点的数量更改为 Number。Number 的缺省值为 8000。 |
-NnNumber |
将符号表的大小增加为 Number。Number 的缺省值为 1500。 |
-NtNumber |
将树节点的数量更改为 Number。Number 的缺省值为 1000。 |
另外,lint 命令
识别了 cpp 命令(宏预处理器)的以下标志:
-IDirectory |
将 Directory 添加到 lint 命令会在其中搜索 #include 文件的目录列表中。 |
-DName[=Definition] |
像由 #define 文件那样定义 Name。
Definition 的缺省值为 1。 |
-qDBCS |
设置由当前语言环境指定的多字节方式。 |
-UName |
删除任何 Name 的初始化定义,
其中 Name 是一个保留符号,由特定的预处理器预先定义。 |
退出状态
此命令返回以下的退出值:
示例
- 为了检查 C 程序中的错误,请输入:
lint command.c
- 为了禁止其中的一些消息,请输入:
lint -v -x program.c
这会检查 program.c,但是不会显示关于不用的函数参数(-v)或不用的外部(-x)的错误消息。
- 为了对额外的 lint 库检查程序,请输入:
lint -lsubs program.c
这会对 /usr/ccs/lib/llib-lc.lnchecks 标准
lint 库和 /usr/lib/llib-lsubs.ln lint 库检查 program.c。
- 为了对可移植库和一个额外的库进行检查,请输入:
lint -lsubs -p program.c
这会对 /usr/ccs/lib/llib-port.ln
可移植 lint 库和 /usr/lib/llib-lsubs.ln lint 库检查 program.c。
- 为了仅对非标准库进行检查,请输入:
lint -lsubs -n program.c
这只会对 /usr/lib/llib-lsubs.ln 检查 program.c。
文件
/usr/lib/lint[12} |
程序 |
/usr/ccs/lib/llib-lansi |
标准 ANSI 函数(源)的声明 |
/usr/ccs/lib/llib-lansi.ln |
标准 ANSI 函数(二进制格式)的声明 |
/usr/ccs/lib/llib-lc |
标准函数(源)的声明 |
/usr/ccs/lib/llib-lc.ln |
标准函数(二进制格式)的声明 |
/usr/ccs/lib/llib-lcrses |
curses 函数(源)的声明 |
/usr/ccs/lib/llib-lcrses.ln |
curses 函数(二进制格式)的声明 |
/usr/ccs/lib/llib-lm |
标准 math 函数(源)的声明 |
/usr/ccs/lib/llib-lm.ln |
标准 math 函数(二进制格式)的声明 |
/usr/ccs/lib/llib-port |
可移植函数(源)的声明 |
/usr/ccs/lib/llib-port.ln |
可移植函数(二进制格式)的声明 |
/usr/lpp//xlC/lib |
包含了 C++ 库的目录 |
/var/tmp/*lint* |
临时文件 |
相关信息
cpp
命令、make 命令。
[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 |
法律条款
]