lint 程序是一个静态分析器。它不能求出它检测到的依赖性的运行时结果。例如,某些程序可能包含数百个无法执行到的 break 语句;虽然这些语句不太重要,但 lint 仍会对其进行标记。例如,可以在源文本中使用 lint 命令行选项和嵌入为注释的特殊指令,如下所示:
使用 -b 选项调用 lint 以禁止关于执行不到的 break 语句的所有错误消息。
在任何无法执行到的语句前面添加注释 /*NOT REACHED*/ 以禁止对该语句的诊断。
下面按字母顺序列出了 lint 选项,其中有几个 lint 选项与禁止 lint 诊断消息有关。表 15中也列出了这些选项以及它们禁止的具体消息(消息列在按字母排序的选项之后)。用于调用增强 lint 的选项以 -N 开头。
lint 可识别许多 cc 命令行选项,包括 -A、-D、-E、-g、-H、-O、-P、-U、-ansi、-std=value、-pedantic、-Xa、-Xc、-Xs、-Xt 和 -Y,不过,-g 和 -O 将被忽略。未识别的选项被警告并忽略。
禁止某些消息。 请参阅表 15。
禁止某些消息。 请参阅表 15。
使用指定的文件名创建 .ln 文件。 这些 .ln 文件仅是 lint 的第一遍检查产生的文件。filename 可以是完整路径名。
为命令行上的每个名为 .c 的文件创建一个 .ln 文件,该文件包含与 lint 的第二遍检查相关的信息。 不执行第二遍检查。
指定目录 dir,会将 lint 输出文件(.ln 文件)放置在其中。 此选项会影响 -c 选项。
-err=warn 是 -errwarn=%all 的宏。 请参见-errwarn=t。
执行 l 指定的其他检查。 缺省值为 -errchk=%none。指定 -errchk 与指定 -errchk=%all 等效。l 是一个以逗号分隔的检查列表,由下表中的一个或多个标志组成,例如 -errchk=longptr64,structarg。
|
指定 lint 输出的格式。f 可以为下列值之一:macro、simple、src 或 tab。
|
缺省值为 -errfmt=tab。指定 -errfmt 与指定 -errfmt=tab 等效。
如果指定了多种格式,则使用最后指定的格式,并且 lint 发出有关未使用格式的警告。
在您也指定了 -Ncheck 时,让 lint 为头文件报告特定消息。h 是一个以逗号分隔的列表,它包含以下一项或多项:dir、no%dir、%all、%none、%user。
|
示例:
% lint -errhdr=inc1 -errhdr=../inc2
在目录 inc1 和 ../inc2 中检查已使用的头文件。
% lint -errhdr=%all,no%../inc
检查除目录 ../inc 中的头文件之外的所有已使用的头文件。
t 是一个以逗号分隔的列表,它包含以下项中的一项或多项:tag、no% tag、%all、%none。
|
缺省值为 -erroff=%none。指定 -erroff 与指定 -erroff=%all 等效。
示例:
% lint -erroff=%all,no%E_ENUM_NEVER_DEF,no%E_STATIC_UNUSED
仅打印消息 “enum never defined” 和 “static unused”,并禁止其他消息。
% lint -erroff=E_ENUM_NEVER_DEF,E_STATIC_UNUSED
仅禁止消息 “enum never defined” 和 “static unused”。
使用 -errsecurity 选项检查您的代码是否有安全漏洞。
level 必须为下表中显示的值之一。
|
如果未指定 -errsecurity 的设置,lint 会将它设置为 -errsecurity=%none。如果指定 -errsecurity 但不指定参数,lint 会将其设置为 -errsecurity=standard。
显示每个错误消息的消息标记。a 可以是 yes 或 no。 缺省值为 -errtags=no。指定 -errtags 与指定 -errtags=yes 等效。
可与所有 -errfmt 选项一起使用。
如果发出包括的警告消息,lint 会以失败状态退出。t 是一个以逗号分隔的列表,它包含以下一项或多项:tag、no%tag、%all、%none。 标记的顺序很重要。例如,%all,no%tag 会导致 lint 在发出除 tag 之外的任何警告时,以严重状态退出。下表列出了 -errwarn 值。
|
缺省值为 -errwarn=%none。单独指定 -errwarn 与 -errwarn=%all 等效。
在引用命令行上指定的 .c 文件时,打印命令行上提供的路径名,而不是只打印其基名。
使用文件 file 中包含的选项执行 lint。 可在 file 中指定多个选项(每行一个)。
禁止某些消息。 请参阅表 15。
改变 /* LINTED [message] */ 指令或 NOTE(LINTED(message)) 注释的行为。通常,lint 会针对这些指令后面的代码禁止警告消息。如果不设置该选项,lint 不禁止消息,而是打印包含指令或注释内部的注释的附加消息。
在与 -l 一起使用时,在目录 dir 中搜索 lint 库。
禁止某些消息。 请参阅表 15。
指定所分析的程序的数据类型模型。还搜索与所选的数据类型模型(32 位或 64 位)相对应的 lint 库。
使用 –m32 可验证 32 位 C 程序;使用 –m64 可验证 64 位程序。
在所有 Oracle Solaris 平台和不支持 64 位的 Oracle Linux 平台上,ILP32 数据类型模型(32 位 int、long、pointer 数据类型)是缺省值。在支持 64 位的 Oracle Linux 平台上缺省为 LP64 数据类型模型(64 位 long 和 pointer 数据类型)。–m64 仅允许在支持 LP64 模型的平台上使用。
检查头文件中的相应声明,并检查宏。c 是一个以逗号分隔的检查列表,它包含以下一项或多项:macro、extern、%all、%none、no%macro、no%extern。
|
缺省值为 -Ncheck=%none。指定 -Ncheck 与指定 -Ncheck=%all 等效。
值可能使用逗号组合在一起,例如 -Ncheck=extern,macro.。
以下示例执行除宏检查之外的所有检查。
% lint -Ncheck=%all,no%macro
(已过时)在以后的发行版中将删除 -Nlevel 选项。
通过指定用于报告问题的增强 lint 分析级别,启用增强 lint 模式。 此选项用于控制检测到的错误量。级别越高,检验时间越长。n 是一个数字: 1、2、3 或 4。没有缺省值。如果未指定 -Nlevel,lint 会使用其基本分析模式。如果指定不带任何参数的 -Nlevel,lint 会设置 -Nlevel=4。
有关基本和增强 lint 模式的说明,请参见使用 lint。
分析单个过程。报告发生在某些程序执行路径上的无条件错误。不执行全局数据和控制流分析。
分析整个程序,包括全局数据和控制流。报告发生在某些程序执行路径上的无条件错误。
分析整个程序,包括常量传播(常量用作实际参数时的情况)以及在 -Nlevel=2 下执行的分析。
在此分析级别检验 C 程序所用的时间比前一级别长 2 到 4 倍。需要额外的时间是因为 lint 通过为程序变量创建可能值的集合对程序进行部分解释。这些变量集合是以常量以及包含程序中的常量操作数的条件语句为基础创建的。这些集合形成创建其他集合的基础(一种常量传播形式)。
作为分析结果接收的集合根据以下算法来评估正确性:
如果对象的所有可能值之中存在一个正确值,则该正确值用作进一步传播的基础;否则诊断出一个错误。
分析整个程序,并报告使用某些程序执行路径时会发生的条件错误,以及在 -Nlevel=3 下执行的分析。
在此分析级别上,存在更多诊断消息。分析算法通常对应于 -Nlevel=3 的分析算法,所不同的是任何无效值现在会生成一条错误消息。在此级别上进行分析所需的时间增大两个数量级(大约慢 20 到 100 倍)。在此情况下,需要的多余时间与以递归、条件语句等类似内容为特征的程序复杂性直接成比例。因此,对于超过 100,000 行的程序,可能难于使用此级别的分析。
导致 lint 创建一个名为 llib-lx.ln 的 lint 库。 该库是从 lint 在其第二遍检查中使用的所有 .ln 文件创建的。-c 选项会使 -o 选项的任何使用无效。要生成 llib-lx.ln 而不产生任何无关消息,可以使用 -x 选项。如果 lint 库的源文件仅为外部接口,则 -v 选项会很有用。如果使用 -lx 调用 lint,则生成的 lint 库可以在以后使用。
缺省情况下,使用 lint 的基本格式创建库。如果使用 lint 的增强模式,则创建的库将为增强格式,并且只能在增强模式下使用。
将 .ln 文件写入 file,以供 cxref(1) 使用。 如果此选项打开,此选项将禁用增强模式。
生成具有 "warning:" 或 "error:" 前缀的简单诊断。 缺省情况下,lint 会缓冲某些消息来生成复合输出。
禁止某些消息。 请参阅表 15。此选项适用于对较大程序的文件子集运行 lint。
禁止某些消息。 请参阅表 15。
将 .ln 文件写入 file,以供 cflow(1) 使用。 如果此选项打开,此选项将禁用增强模式。
接受 C++ 样式的注释。 特别是,可使用 // 指示注释的开始。a 可以是 yes 或 no。缺省值为 -XCC=no。指定 -XCC 与指定 -XCC=yes 等效。
使用此选项时,l 是下列值之一:any、basic、weak、layout、strict、std 或 strong。 有关不同的歧义消除级别的详细说明,请参见表 49。
如果未指定 -Xalias_level,则此标志的缺省值为 -Xalias_level=any,这意味着将不会执行任何基于类型的别名分析。如果指定了 -Xalias_level,但未提供级别,则缺省值为 -Xalias_level=layout。
请确保运行 lint 时所在的歧义消除级别不如运行编译器时所在的级别严格。如果运行 lint 时所在的歧义消除级别比编译时所在的级别更严格,结果将很难解释并且可能令人误解。
有关歧义消除的详细说明以及有助于歧义消除的 pragma 的列表,请参见lint 过滤器。
(Oracle Solaris) 已过时。请勿使用。请参见-m32|-m64。
-Xc99 标志可控制编译器识别根据 C99 标准(ISO/IEC 9899:1999 C 编程语言)实现的功能。
o 可以是下列值之一: all 和 none。
-Xc99=none 会禁用对 C99 功能的识别。-Xc99=all 会启用对支持的 C99 功能的识别。
指定不带任何参数的 -Xc99 与指定 -Xc99=all 等效。
如果已指定 -std 或 -pedantic 标志,则不能使用 -Xc99 标志。
保留执行 lint 期间创建的临时文件,而非自动删除它们。a 可以是 yes 或 no。 缺省值为 -Xkeeptmp=no。指定 -Xkeeptmp 与指定 -Xkeeptmp=yes 等效。
将临时文件的目录设置为 dir。 如果没有此选项,临时文件将放在 /tmp 中。
报告执行每遍 lint 检查所需的时间。a 可以是 yes 或 no。 缺省值为 -Xtime=no。指定 -Xtime 与指定 -Xtime=yes 等效。
针对 K&R C 与 Oracle Developer Studio ISO C 之间的差异发出警告。a 可以是 yes 或 no。 缺省值为 -Xtransition=no。指定 -Xtransition 与指定 -Xtransition=yes 等效。
此选项允许编译器将 U"ASCII-string" 形式的文本字符串识别成 unsigned short int 数组。 缺省值为 -Xustr=no,它禁止编译器识别 U"ASCII-string" 文本字符串。-Xustr=ascii_utf16_ushort 允许编译器识别 U"ASCII-string" 文本字符串。
禁止某些消息。 请参阅表 15。
将命令行上指定的各个 .c 文件视为以指令 /* LINTLIBRARY */ 或注释 NOTE(LINTLIBRARY) 开头。 lint 库通常是使用 /* LINTLIBRARY */ 指令或 NOTE(LINTLIBRARY) 注释创建的。