lint [-#] [-###] [-a] [-b] [-Cfilename] [-c] [-dirout=dir] [-err=warn] [-errchk=l] [-errfmt=f] [-errhdr=h] [-erroff=t] [-errsecurity=v] [-errtags=a] [-errwarn=t] [-F] [-fd] [-flagsrc=file] [-h] [-Idir] [-k] [-Ldir] [-lx] [-m] [-m32|-m64] [-Ncheck=c] [-Nlevel=n] [-n] [-ox] [-p] [-Rfile] [-s] [-u] [-V] [-v] [-Wfile] [-Xarch=amd64] [-Xarch=v9] [-Xalias_level[=l]] [-XCC=a] [-Xc99[=o]] [-Xkeeptmp=a] [-Xtemp=dir] [-Xtime=a] [-Xtransition=a] [-Xustr={ascii_utf16_ushort|no}] [-x] [-y] files
lint 可检测 C 程序文件中有可能是错误、不可移植或浪费的特性。
lint 还可以比编译器更严格地检查类型的使用。lint 将发出错误和警告消息。它检测的内容包括:
不可执行的语句
未在顶部进入的循环
已声明且未使用的自动变量
值为常量的逻辑表达式
lint 将检查在某些位置返回值而在其他位置不返回值的函数、使用不同数量或类型的参数调用的函数,以及值未使用或值已使用但未返回任何内容的函数。
lint 可在两种模式下运行:基本模式-lint 程序的缺省值;增强模式-包括基本模式 lint 执行的一切操作,还提供代码的额外详细分析。
在增强模式下,分析包括:
源程序的结构和流分析
常量传播和常量表达式求值
控制流和数据流的分析
数据类型使用的分析
因此,lint 可以在增强模式下检测以下问题:
未使用的#include指令、变量和过程
内存取消分配之后内存的使用
未使用的赋值
初始化之前使用变量值
取消分配未分配内存
写入常量数据段时使用指针
非等价宏重定义
未执行到的代码
联合中值类型的使用不符合规定
实际参数的隐式强制类型转换。
增强模式由 -Nlevel 或 -Ncheck 选项启用(请参见下文的描述)。
名称以 .c 结尾的参数当作 C 源文件;以 .i 结尾的参数当作预处理程序输出文件(使用编译器的 -P 选项生成)。
使用 -C、-c 或 -o 选项时,名称以 .ln 结尾的参数当作之前调用 lint 的结果。当指定 .c 文件作为输入时,.ln 文件类似于 cc(1) 命令生成的 .o(对象)文件。将警告并忽略带有其他后缀的文件。
在增强模式下,lint 生成 .ln 文件,这些文件存储的信息比在基本模式下生成的 .ln 文件存储的信息多。在增强模式下,lint 可以读取和理解由基本或增强 lint 模式生成的所有 .ln 文件。在基本模式下,lint 只能读取和理解由基本 lint 模式生成的 .ln 文件。
lint 接受所有 .c、.i、.ln 和 llib-lx.ln(由 -lx 指定)文件,并按命令行顺序对其进行处理。缺省情况下,lint 会将标准 C lint 库 (llib-lc.ln) 附加到文件列表结尾。如果使用了 -C 或 -c 选项,则会忽略 .ln 和 llib-lx.ln 文件。如果未使用 -C 或 -c 选项,lint 在第二遍检查期间将从 .ln 和 llib-lx.ln 文件列表中检查相互兼容性。
lint 选项的使用不限数量、不限顺序,还能与文件名参数混合。
通过缺省编译器选项文件,用户可以指定一组应用于所有编译的缺省选项,除非另行覆盖。例如,该文件可以指定所有编译的缺省级别为 -xO2,或自动包括文件 setup.il。
缺省选项文件也可与 lint 一起使用。
启动时,编译器会搜索缺省选项文件,并列出应对所有编译包含的缺省选项。环境变量 SPRO_DEFAULTS_PATH 指定要在其中搜索缺省文件的目录的冒号分隔列表。
如果该环境变量未设置,则会使用一组标准缺省设置。如果该环境变量已设置但为空,则不会使用任何缺省设置。
缺省文件名的格式必须为 compiler.defaults,其中 compiler 是以下项之一:cc、c89、c99、CC、ftn 或 lint。例如,lint 的缺省值为 lint.defaults。
如果在 SPRO_DEFAULTS_PATH 列出的目录中找到了适用于编译器的缺省文件,则编译器将读取该文件,并在处理命令行上的选项之前处理这些选项。系统将使用找到的第一个缺省文件,并且会终止搜索。
系统管理员可能会在 Studio-install-path/prod/etc/config 中创建适用于整个系统范围的缺省文件。如果设置了该环境变量,则不会读取已安装的缺省文件。
缺省文件的格式与命令行类似。该文件的每一行都可以包含一个或多个由空格分隔的编译器选项。Shell 扩展(例如通配符和替换)将不会应用于缺省文件中的选项。
SPRO_DEFAULTS_PATH 的值和完全扩展的命令行将显示在由选项 -#、-### 和 -dryrun 生成的详细输出中。
用户在命令行上指定的选项通常会优先于从缺省文件读取的选项。例如,如果缺省文件指定使用 -xO4 进行编译,而用户在命令行上指定了 -xO2,则将使用 -xO2 进行编译。
缺省选项文件中显示的某些选项将附加在命令行中指定的选项之后。这些选项包括预处理程序选项 -I,链接程序选项 -B、-L、-R 和 -l,以及所有文件参数(例如:源文件、对象文件、归档文件和共享对象)。
缺省选项文件的接口稳定性未确定。选项处理顺序在以后的发行版中可能会更改。
lint 选项为:
显示调用的每个组件(详细模式)。
显示调用的每个组件,但与 -# 选项不同的是,并不实际执行。
禁止由于对非长变量赋予长值而产生的信息。
禁止由于执行不到中断和空语句而产生的信息。
生成一个 .ln 文件,文件名由 filename 指定。这些 .ln 文件仅是 lint 的第一遍检查产生的文件。filename 可以是完整路径名。
使 lint 针对命令行上的每个 .c 文件生成一个 .ln 文件。这些 .ln 文件仅是 lint 的第一遍检查产生的文件,不对其进行函数间兼容性检查。
设置所有 lint 输出文件所放位置的目录名称。此选项会影响 -c 选项。
这是用于 -errwarn=%all 的宏。
检查通过值传递的结构参数;检查是否可移植到长整型和指针大小为 64 位的环境。
值可能是一个逗号分隔列表,例如 -errchk=longptr64,structarg。
缺省值为 -errchk=%none。指定 -errchk 与指定 -errchk=%all 等效。
l 是一个逗号分隔的检查列表,它包含以下项中的一个或多个:
如果希望 lint 在第一遍检查期间检查类似 printf 的格式字符串,请使用该选项。无论是否使用 -errchk=locfmtchk,lint 始终都会在第二遍检查期间检查类似 printf 的格式字符串。
使用此选项可增强代码的可维护性。如果 -errchk=parentheses 返回一个警告,请考虑使用额外的括号明确地表示代码中操作的优先级。
当标准 ANSI/ISO C 值保留规则允许在无符号整型的表达式中进行带符号整型值的符号扩展时,该选项会生成错误消息。仅当同时指定 -errchk=longptr64 时,该选项才会生成错误消息。
将较长整数赋值给较短整数时,会发出警告。在长度相同但存在有无符号之分的整数之间赋值时,也会发出这些警告;例如无符号 int = 带符号 int。
检查通过值传递的结构参数,并在形式参数类型未知时报告情况。
检查是否可移植到其long整型和指针大小为 64 位、平整型大小为 32 位的环境。即使使用了显式强制类型转换,也检查指针表达式和long整型表达式是否赋值为平整型。
请注意,系统头文件定义用于操纵指针的类型。使用 -m32 标志,这些类型可以定义为 int 等基本类型,这些类型无法安全操纵指针,从而导致 false 警告。例如,size_t 的使用:
#include <stdlib.h> size_t myfiunk(uint32_t param) { return sizeof(uint64_t) * param; } . $ lint -m32 -mux -errchk=longptr64 bug.c (5) warning: assignment of 64-bit integer to 32-bit integer $
执行 errchk 的所有检查。
不执行 errchk 的任何检查。这是缺省值。
指定 lint 输出的格式。f 可以是以下值之一:macro、simple、src 或 tab。
显示错误的源代码、行号和位置,并展开宏。
对于一行(简单)诊断消息,在括号中显示错误的行号和位置号。类似于 -s 选项,但是包含错误的位置信息。
显示错误的源代码、行号和位置(不展开宏)。
以制表格式显示。
缺省值为 -errfmt = tab。指定 -errfmt 与指定 -errfmt = tab 等效。
如果指定了多种格式,则使用最后指定的格式,并且 lint 发出有关未使用格式的警告。
与 -Ncheck 一起使用时,为头文件启用某些消息的报告。h 是一个逗号分隔列表,由以下值中的一个或多个组成:dir、no%dir、%all、%none、%user
[不] 报告目录 dir 中包含的头文件的 -Ncheck 消息。
检查使用的所有头文件。
不检查头文件。这是缺省值。
缺省值。检查所有用户头文件。不检查 /usr/include 及其子目录中的系统包含文件。不检查编译器提供的系统头文件。
禁止或启用 lint 错误消息。t 是一个逗号分隔列表,由以下值中的一个或多个组成:tag、no%tag、%all、%none。
禁止由该 tag 指定的消息。
禁止所有消息。
启用所有消息。这是缺省值。
缺省值为 -erroff=%none。指定 -erroff 与指定 -erroff=%all. 等效
使用 -errsecurity 选项可检查代码中的安全漏洞。v 必须是以下值之一:core、standard、extended 或 %none。
如果未指定 -errsecurity 的设置,lint 会将它设置为 -errsecurity=%none。如果指定不带标志的 -errsecurity,lint 会将其设置为 -errsecurity=standard。
此级别检查的源代码构造几乎始终是不安全或难以验证的。此级别的检查包括:
将可变格式字符串与 printf() 和 scanf() 系列函数一起使用
在 scanf() 函数中使用无限制字符串 (%s) 格式
使用无安全用法的函数:gets()、cftime()、ascftime()、creat()
错误地使用 open() 和 O_CREAT
将在此级别生成警告的源代码视为错误。应更改有问题的源代码。在所有情况下,都应采用更安全简单的代码。
此级别检查包括 core 级别的所有检查,以及可能安全、但有更好的可用替代代码的构造的检查。此级别非常适合新编写的代码。此级别的其他检查包括:
使用除 strlcpy() 之外的字符串复制函数
使用弱随机数函数
使用不安全的函数生成临时文件
使用 fopen() 创建文件
使用调用 shell 的函数
使用新的或经过大幅修改的代码替换在此级别生成警告的源代码。应权衡消除传统代码中的这些警告对应用程序造成的不稳定风险。
此级别检查包含最全面的一组检查,包括 core 级别和 standard 级别的所有检查。此外,还会生成许多有关在某些情况下可能不安全的构造的警告。此级别的检查可用作检查代码的辅助措施,但无需将这些检查用作判断源代码是否可接受的标准检查。此级别的其他检查包括:
在循环中调用 getc() 或 fgetc()
使用易于产生路径名争用情况的函数
使用 exec 函数系列
stat() 和其他函数之间的争用情况
检查在此级别生成警告的源代码,确定是否存在潜在安全问题。
显示每条错误消息的消息标记。a 可以是 yes 或 no。缺省值为 -errtags=no。指定 -errtags 与指定 -errtags=yes 等效。
可与所有 -errfmt 选项一起使用。
如果发出了指示的警告消息,lint 将以失败状态退出。t 是一个逗号分隔列表,由以下值中的一个或多个组成:
在 tag 指定的消息作为警告消息发出时使 lint 以致命状态退出。如果未出现 tag,则没有影响。
如果 tag 指定的消息仅作为警告消息发出,将防止 lint 以致命状态退出。如果未出现 tag,则没有影响。为了避免在发出警告消息时导致 lint 以致命状态退出,可使用该选项来还原以前用该选项和 tag 或 %all 指定的警告消息。
如果发出了任何警告消息,将导致 lint 以致命状态退出。%all 可以后跟 no% tag,以避免该行为的特定警告消息。
防止 lint 在出现任何警告标记时以致命状态退出。这是缺省值。
输出文件的路径名。lint 通常输出文件名而不输出路径。
报告旧式函数定义和声明。
使用文件 file 中包含的选项执行 lint。可在 file 中指定多个选项(每行一个)。
不要进行尝试发现错误、改善样式和减少废码的试探性测试。
在搜索当前目录和/或标准位置之前,在目录 dir 中搜索包含的头文件。
改变 /*LINTED [message]*/ 指令或 NOTE(LINTED(message)) 注释的行为。通常,lint 会针对这些指令后面的代码禁止警告消息。如果不设置该选项,lint 不禁止消息,而是输出包含指令或注释内部的注释的附加消息。
在搜索标准位置之前,在 dir 中搜索 lint 库。
包括 lint 库 llib-lx.ln。例如,通过在命令行上插入 -lm,可包括数学库 llib-lm.ln 的 lint 版本。该参数不禁止缺省使用 llib-lc.ln。这些 lint 库必须在假定的目录中。该选项可用于引用本地 lint 库,对开发多文件项目非常有用。
禁止由于可声明为静态的外部符号而产生的信息。
指定所分析程序的内存模型。还搜索与所选的内存模型(32 位/64 位)相对应的 lint 库。
使用 -m32 可验证 32 位 C 程序;使用 -m64 可验证 64 位程序。
在所有 Oracle Solaris 平台和不支持 64 位的 Linux 平台上,ILP32 内存模型(32 位 int、long、pointer 数据类型)是缺省值。在启用了 64 位的 Linux 平台上缺省为 LP64 内存模型(64 位 long 和指针数据类型)。-m64 仅允许在支持 LP64 模型的平台上使用。
请注意,在以前的编译器发行版中,内存模型 ILP32 或 LP64 是通过选择 -Xarch 标志来隐式指定的。从 Sun Studio 12 编译器开始,就不再是这样了。在大多数平台上,只需在命令行上添加 -m64,就可以通过 lint 调用 64 位程序。
有关预定义宏的更多信息,请参见该 lint 选项列表后面的部分。另请参见 -Xarch。
从头文件中检查相应的声明;检查宏。c 是检查项的逗号分隔列表,由以下值中的一个或多个组成:
检查文件之间的宏定义的一致性。
检查源文件与关联的头文件(例如,file1.c 与 file1.h)之间声明的一一对应关系。确保头文件中既无多余的 extern 声明,也不缺少 extern 声明。
执行 Ncheck 的所有检查。
不执行 Ncheck 的任何检查。这是缺省值。
不执行 Ncheck 的任何宏检查。
不执行 Ncheck 的任何外部检查。
值可能使用逗号组合在一起,例如 -Ncheck=extern,macro。
缺省值为 -Ncheck=%none。指定 -Ncheck 与指定 -Ncheck=%all 等效。
(已过时)在以后的发行版中将删除 -Nlevel 选项。
通过指定用于报告问题的 lint 增强分析级别启用 lint 增强模式。该选项允许您控制检测到的错误量。级别越高,检验时间越长。n 是一个数字: 1、2、3 或 4。没有缺省值。如果未指定 -Nlevel,lint 会使用其基本分析模式。如果指定不带任何参数的 -Nlevel,lint 会设置 -Nlevel=4。
有关 lint 基本和增强分析模式的说明,请参见本手册页开头或 C 用户指南。
-Nlevel=1 分析单个过程。报告发生在某些程序执行路径上的无条件错误。不执行全局数据和控制流分析。
-Nlevel=2 缺省值。分析整个程序,包括全局数据和控制流。报告发生在某些程序执行路径上的无条件错误。
-Nlevel=3分析整个程序,包括常量传播(常量用作实际参数时的情况)以及在 -Nlevel=2 下执行的分析。
在此分析级别检验 C 程序所用的时间比前一级别长 2 到 4 倍。需要额外的时间是因为 lint 通过为程序变量创建可能值的集合对程序进行部分解释。这些变量集合是以常量以及包含程序中的常量操作数的条件语句为基础创建的。这些集合形成创建其他集合的基础(一种常量传播形式)。作为分析结果接收的集合根据以下算法来评估正确性:
如果对象的所有可能值之中存在一个正确值,则该正确值用作进一步传播的基础;否则诊断出一个错误。
-Nlevel=4 分析整个程序,并报告使用某些程序执行路径时会发生的条件错误,以及在 -Nlevel=3 下执行的分析。
在此级别上,存在更多诊断消息。分析算法通常对应于 -Nlevel=3 的分析算法,所不同的是任何无效值现在会生成一条错误消息。在此级别上进行分析所需的时间增大两个数量级(大约慢 20 到 100 倍)。在这种情况下,需要的额外时间与以递归、条件语句等内容为特征的程序复杂性直接成比例。因此,可能很难将该级别的分析用于超过 100,000 行的程序。
不检查与标准 C lint 库的兼容性。
使 lint 创建名为 llib-lx.ln 的 lint 库。该库是从 lint 在其第二遍检查中使用的所有 .ln 文件创建的。-c 选项会使 -o 选项的任何使用无效。要生成 llib-lx.ln 而不产生任何无关消息,可以使用 -x 选项。如果 lint 库的源文件仅为外部接口,则 -v 选项会很有用。如果使用 -lx 选项调用 lint,则生成的 lint 库可以在以后使用。
缺省情况下,使用 lint 的基本格式创建库。如果使用 lint 的增强模式,则创建的库将为增强格式,并且只能在增强模式下使用。
尝试检查到 C 语言其他变种的可移植性。该选项连同更严格的检查会将所有非外部名称截断为八个字符,将所有外部名称截断为六个字符和大写或小写。
将 .ln 文件写入 file,以供 cxref(1) 使用。如果此选项打开,此选项将禁用增强模式。
生成带有 "warning:" 或 "error:" 前缀的简单诊断。缺省情况下,lint 会缓冲某些消息以生成复合输出。
禁止由于函数和外部变量已使用但未定义或者已定义但未使用而产生的信息。此选项适用于对较大程序的文件子集运行 lint。
将产品名称和发行版写入标准错误。
禁止由于函数中参数未使用而产生的信息。
将 .ln 文件写入 file,以供 cflow(1) 使用。如果此选项打开,此选项将禁用增强模式。
l 为以下几项之一:any、basic、weak、layout、strict、std 或 strong。有关更多信息,请参见 C 用户指南。
如果未指定 -Xalias_level,则标志的缺省值为 -Xalias_level=any。这意味着没有基于类型的别名分析。如果指定了 -Xalias_level,但未提供级别,则缺省值为 -Xalias_level=layout。
请确保运行 lint 时所在的歧义消除级别不如运行编译器时所在的级别严格。如果运行lint时所在的歧义消除级别比编译时所在的级别更严格,结果将很难解释并且可能令人误解。
已过时。不使用。请参见 -m32 | -m64。
已过时。不使用。请参见 -m32 | -m64。
接受 C++ 样式的注释。a 可以是 yes 或 no。特别是,可以使用 / 指示注释的开始。缺省值为 -XCC=no;指定 -XCC 与指定 -XCC=yes 等效。
注意:仅当使用 -xc99=%none 时,才需使用此选项。使用 -xc99=%all(缺省值)时,lint 接受由 // 指示的注释。
-Xc99 标志可控制编译器对根据 C99 标准(ISO/IEC 9899:1999,编程语言-C)实现的功能的识别。
o 可以是下列值之一: all 和 none。
-Xc99=none 可禁用对 C99 功能的识别。-Xc99=all 可启用对支持的 C99 功能的识别。指定不带任何参数的 -Xc99 与指定 -Xc99=all 等效。
注意:虽然编译器的支持级别缺省为 C99 标准的语言功能,但 Solaris 8 和 Solaris 9 软件在 /usr/include 中提供的标准头文件不符合 1999 ISO/IEC C 标准。如果遇到错误消息,请尝试使用 -Xc99=none 获取这些头文件的 1990 ISO/IEC C 标准行为。
保留执行 lint 期间创建的临时文件,而非自动删除它们。a 可以是 yes 或 no。缺省值为 -Xkeeptmp=no;指定 -Xkeeptmp 等效于指定 -Xkeeptmp=yes。
将临时文件的目录设置为 dir。如果没有此选项,临时文件将放在 /tmp 中。
报告执行每遍 lint 检查所需的时间。a 可以是 yes 或 no。缺省值为 -Xtime=no;指定 -Xtime 等效于指定 -Xtime=yes。
针对 K&R C 和 Sun ANSI C 之间的差异发出警告。a 可以是 yes 或 no。缺省值为 -Xtransition=no;指定 -Xtransition 等效于指定 -Xtransition=yes。
使用该选项,会将 U"ASCII_string" 格式的文本字符串识别为无符号短整型数组。由于此类字符串还不属于任何标准,因此此选项启用对非标准 C 的识别。
通过指定 -Xustr=no,可以关闭 lint 识别 U"ASCII_string" 文本字符串。该选项在命令行上最右侧的实例覆盖了先前的所有实例。
缺省值为 -Xustr=no。如果指定了没有参数的 -Xustr,编译器将不接受该选项,而是发出一个警告。如果 C 或 C++ 标准定义了语法的含义,那么缺省设置是可以更改的。
可以指定 -Xustr=ascii_ustf16_ushort 而无需同时指定 U"ASCII_string" 文本字符串。这样做不是错误。
有关显示前置有 U 的字符串的代码示例,请参见 cc1() 手册页中 -xustr 的说明。
不报告由外部声明引用但从未使用的变量。
指定将正在进行 lint 处理的文件当作使用了 /*LINTLIBRARY*/ 指令或 NOTE(LINTLIBRARY) 注释一样对待。通常使用 /*LINTLIBRARY*/ 指令或 NOTE(LINTLIBRARY) 注释创建 lint 库。
lint 可识别许多 cc (1) 命令行选项,包括 -A、-D、-E、-g、-H、-O、-P、-U、-ansi、-std=value、-pedantic、-Xa、-Xc、-Xs、-Xt 和 -Y,不过 -g 和 -O 将被忽略。未识别的选项被警告并忽略。定义预定义的宏 lint 是为了允许针对 lint 更改或删除某些有问题的代码。因此,对于计划由 lint 检查的所有代码,应将符号 lint 视为保留字。
缺省情况下,lint 提供以下预定义谓词(在 -Xc 模式下无效):
#assert lint (on)
lint 标记以及 cc(1) 手册页中列出的标记都是预定义的。
C 源代码中的某些传统注释可更改 lint 的行为:
使 lint 仅对前 n 个参数进行用法检查;缺少 n 视为 0(该指令的作用与下一个函数的 -v 选项相同)。
禁止由于条件表达式的常量操作数而产生的信息。
禁止由于 if 语句而引起 null 语句时产生的信息。该指令应放在测试表达式之后和分号之前。当空 if 语句后跟有效 else 语句时,提供该指令以支持空 if 语句。它禁止针对空 else 结论发出消息。
禁止由于 case 或 default 带标签语句失败而产生的信息。该指令应放在标签之前并紧挨着标签。
禁止所有文件内警告(处理未使用的变量或函数时发出的警告除外)。该指令应放在紧挨着发生 lint 警告的位置之前的行上。-k 选项改变 lint 处理该指令的方式。lint 会输出注释中包含的附加消息(如果有),而非禁止消息。该指令可与 -s 选项一起用于 post-lint 过滤。
调用 -o 时,仅将该指令之后的 .c 文件中的定义写入库 .ln 文件。该指令禁止由于此文件中存在未使用的函数和函数参数而产生的信息。
在适当的点停止关于不可执行代码的注释。[该注释通常紧跟在调用 exit(2) 之类的函数之后放置]。
使 lint 照常检查前 (n-1) 个参数。nth 参数解释为用于检查其余参数的 printf 格式字符串。
使 lint 在 n 为非零值的情况下将函数声明原型视为函数定义。该指令只能与 /* LINTLIBRARY */ 指令结合使用。如果 n 为零,则正常对待函数原型。
使 lint 照常检查前 (n-1) 个参数。nth 参数解释为用于检查其余参数的 scanf 格式字符串。
禁止对以下函数声明中可变数量的参数执行常规检查。检查前 n 个参数的数据类型;缺少 n 时,会将其视为 0。建议在新代码或更新的代码中,在定义中使用省略号 (...) 作为终结符。
通过包括文件 note.h,还能以源代码注释的形式指定 lint 指令,例如:
#include <note.h> NOTE(ARGSUSED(n)) NOTE(CONSTANTCONDITION) NOTE(EMPTY) NOTE(FALLTHROUGH) NOTE(LINTLIBRARY) NOTE(LINTED(message)) NOTE(NOTREACHED) NOTE(PRINTFLIKE(n)) NOTE(PRINTFLIKE(func_name,n)) NOTE(PROTOLIB(n)) NOTE(SCANFLIKE(n)) NOTE(SCANFLIKE(func_name,n)) NOTE(VARARGS(n)) NOTE(VARARGS(func_name,n))
以下两个指令只能用作注释:
n=1,2,4,8,16,32,64,128
指示 lint 将其后面的函数结果设置为以 n 字节对齐。例如,将 malloc() 定义为实际返回字(甚至双字)对齐的指针时返回 "char *" 或 "void *"。
指示 lint 不检查提到的参数的用法(此选项仅适用于下一个函数)。
使用某些选项,lint 可以显示精确的源文件行以及指向发生错误的行所在位置的指针。启用该功能的选项是 -errfmt=[macro|simple|src|tab]。在该选项下,lint 可提供以下信息:
源代码行和位置
宏展开
容易出错的堆栈
lint 以每个源文件为基础生成第一个输出。如果未指定 -s,将由于在处理所有源文件后收集并输出包含的文件而产生信息。最后,如果未使用 -C 或 -c 选项,将汇集从所有输入文件收集的信息并检查一致性。此时,如果不确定所产生的信息是源于给定源文件还是包含的文件之一,输出的源文件名将后跟一个问号。
-C、-c 和 -o 选项的行为允许对一组 C 源文件增量使用 lint。通常,使用 -C 或 -c 选项,针对每个源文件调用 lint 一次。每次调用都会生成对应于 .c 文件的 .ln 文件,并输出只与该源文件有关的所有消息。对所有源文件单独运行 lint 后,将再调用一次(不使用 -C 或 -c 选项),列出所有 .ln 文件以及所需的 -lx 选项。这将输出所有文件间不一致。该方案与 make 一起使用效果非常好;允许使用 make 仅对自上次对源文件执行 lint 后修改过的源文件执行 lint。
lint 的一组缺省选项。LINT_OPTIONS 由 lint 解释,就好像已在命令行上设置其值,紧跟在用来调用 lint 的名称后,如下所示:
lint $LINT_OPTIONS ... other-arguments ...
通常是 /tmp,但是可以通过设置环境变量 TMPDIR 重新定义 [请参见 tmpnam(3S) 中的 tempnam]。
包含备注定义文件的目录的冒号分隔路径(请参见 C 用户指南)。
第一遍和第二遍检查
增强的第二遍检查
C 库函数的声明(二进制格式)
临时目录
cc (1) 、 cflow (1) 、 cxref (1) 、 exit (2) 、 make (1S)
请参见 C 用户指南中的 lint 一章。