JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:C 用户指南     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  C 编译器介绍

2.  特定于 C 编译器实现的信息

3.  并行化 C 代码

4.  lint 源代码检验器

4.1 基本和增强 lint 模式

4.2 使用 lint

4.3 lint 命令行选项

4.3.1 -#

4.3.2 -###

4.3.3 -a

4.3.4 -b

4.3.5 -C filename

4.3.6 -c

4.3.7 -dirout=dir

4.3.8 -err=warn

4.3.9 -errchk=l(, l)

4.3.10 -errfmt=f

4.3.11 -errhdr=h

4.3.12 -erroff=tag(, tag)

4.3.13 -errsecurity=level

4.3.14 -errtags=a

4.3.15 -errwarn=t

4.3.16 -F

4.3.17 -fd

4.3.18 -flagsrc=file

4.3.19 -h

4.3.20 -Idir

4.3.21 -k

4.3.22 -Ldir

4.3.23 -lx

4.3.24 -m

4.3.25 -m32|-m64

4.3.26 -Ncheck=c

4.3.27 -Nlevel=n

4.3.27.1 -Nlevel=1

4.3.27.2 -Nlevel=2

4.3.27.3 -Nlevel=3

4.3.27.4 -Nlevel=4

4.3.28 -n

4.3.29 -ox

4.3.30 -p

4.3.31 -Rfile

4.3.32 -s

4.3.33 -u

4.3.34 -V

4.3.35 -v

4.3.36 -Wfile

4.3.37 -XCC=a

4.3.38 -Xalias_level[=l ]

4.3.39 -Xarch=amd64

4.3.40 -Xarch=v9

4.3.41 -Xc99[= o]

4.3.42 -Xkeeptmp=a

4.3.43 -Xtemp=dir

4.3.44 -Xtime=a

4.3.45 -Xtransition=a

4.3.46 -Xustr={ascii_utf16_ushort| no}

4.3.47 -x

4.3.48 -y

4.4 lint 消息

4.4.1 用于禁止消息的选项

4.4.2 lint 消息格式

4.5 lint 指令

4.5.1 预定义值

4.5.2 指令

4.6 lint 参考和示例

4.6.1 由 lint 执行的诊断

4.6.1.1 一致性检查

4.6.1.2 可移植性检查

4.6.1.3 可疑的构造

4.6.2 lint

4.6.3 lint 过滤器

5.  基于类型的别名分析

6.  转换为 ISO C

7.  转换应用程序以适用于 64 位环境

8.  cscope:交互检查 C 程序

A.  按功能分组的编译器选项

B.  C 编译器选项参考

C.  实现定义的 ISO/IEC C99 行为

D.  C99 的功能

E.  实现定义的 ISO/IEC C90 行为

F.  ISO C 数据表示法

G.  性能调节

H.  Oracle Solaris Studio C:K&R C 与 ISO C 之间的差异

索引

4.5 lint 指令

4.5.1 预定义值

运行 lintlint 标记进行预定义。有关预定义标记的列表,另请参见 cc(1) 手册页。

4.5.2 指令

现有注释支持 /*...*/ 形式的 lint 指令,但将来的注释不支持这些指令。建议对所有注释使用源代码注释形式 (NOTE(...)) 的指令。

通过包括 note.h 文件可指定源代码注释形式的 lint 指令,例如:

#include <note.h>

lint 与其他多种工具共享源代码注释方案。安装 Oracle Solaris Studio C 编译器时,还会自动安装 /usr/lib/note/SUNW_SPRO-lint 文件,该文件包含 LockLint 可识别的所有注释的名称。然而,Oracle Solaris Studio C 源代码检验器 lint 也会检查 /usr/lib/note 和 Oracle Solaris Studio 缺省位置 install-directory/prod/lib/note 下的所有文件以查找所有有效的注释。

可通过设置环境变量 NOTEPATH 来指定除 /usr/lib/note 以外的位置,如下所示:

setenv NOTEPATH $NOTEPATH:other_location

下表列出了 lint 指令及其操作。

表 4-9 lint 指令

指令
操作
NOTE(ALIGNMENT(fname,n )) 其中,n=1、2、4、8、16、32、64、128
指示 lint 将其后面的函数结果设置为以 n 字节对齐。例如,将 malloc() 定义为实际返回字(甚至双字)对齐的指针时返回一个 char* 或 void*。

禁止以下消息:

  • improper alignment

NOTE(ARGSUSED(n))

/*ARGSUSEDn*/

该指令的作用类似于下一个函数的 -v 选项。

禁止针对其后的函数定义中除前 n 个参数之外的各个参数发出以下消息。缺省值为 0。对于 NOTE 格式,必须指定 n

  • argument unused in function

NOTE(ARGUNUSED

(par_name[,par_name...] ))

指示 lint 不检查提到的参数的用法(此选项仅适用于下一个函数)。

禁止对 NOTE 或指令中列出的各个参数发出以下消息。

  • argument unused in function

NOTE(CONSTCOND)

/*CONSTCOND*/

禁止发出关于条件表达式的常量操作数的警告消息。禁止对该指令之后的构造发出以下消息。

亦作 NOTE(CONSTANTCONDITION) /* CONSTANTCONDITION */

constant in conditional context

constant operands to op: "!"

logical expression always false: op "&&"

logical expression always true: op "||"

NOTE(EMPTY) /*EMPTY*/
禁止由于 if 语句而引起 null 语句时发出警告信息。该指令应放在测试表达式之后和分号之前。当空 if 语句后跟有效 else 语句时,提供该指令以支持空 if 语句。它禁止针对空 else 结论发出消息。

禁止在 if 的控制表达式与分号之间插入时发出以下消息。

  • statement has no consequent: else

    else 与分号之间插入时;

  • statement has no consequent: if

NOTE(FALLTHRU)

/*FALLTHRU*/

禁止在 casedefault 带标签语句失败时发出警告消息。该指令应放在标签之前并紧挨着标签。

禁止对该指令之后的 case 语句发出以下消息。亦作 NOTE(FALLTHROUGH)/* FALLTHROUGH */

  • fallthrough on case statement

NOTE(LINTED (msg))

/*LINTED [msg]*/

禁止所有文件内警告(处理未使用的变量或函数时发出的警告除外)。该指令应放在紧挨着发生 lint 警告的位置之前的行上。-k 选项改变 lint 处理该指令的方式。 lint 会输出注释中包含的附加消息(如果有),而非禁止消息。该指令可与 -s 选项一起用于 post-lint 过滤。

未调用 -k 时,禁止对该指令之后的代码行发出关于文件内问题的各个警告,但以下警告除外:

  • argument unused in function

  • declarations unused in block

  • set but not used in function

  • static unused

  • variable not used in function

    忽略 msg

NOTE(LINTLIBRARY)

/*LINTLIBRARY*/

调用 -o 时,仅将该指令之后的 .c 文件中的定义写入库 .ln 文件。该指令禁止发出关于此文件中存在未使用的函数和函数参数的消息。
NOTE(NOTREACHED)

/*NOTREACHED*/

在适当的点,停止关于无法执行到的代码的注释。此注释通常放在诸如 exit(2) 的函数调用之后。

禁止在函数末尾该指令之后存在右花括号时发出以下消息。

  • statement not reached

    对于该指令之后的无法执行到的语句;

  • fallthrough on case statement

    对于该指令之后无法从前面的 case 执行到的 case

  • function falls off bottom without returning value

NOTE(PRINTFLIKE(n))

NOTE(PRINTFLIKE(fun_name,n) )

/*PRINTFLIKEn*/

将其后函数定义中的第 n 个参数视为 [fs]printf() 格式字符串,并在其余参数与转换定义之间不匹配时发出以下消息。缺省情况下,如果标准 C 库提供的 [fs]printf() 函数调用中存在错误,lint 会发出这些警告。

对于 NOTE 格式,必须指定 n

  • malformed format strings

    对于该参数中的无效转换定义,以及函数参数类型与格式不一致

  • too few arguments for format

  • too many arguments for format

NOTE(PROTOLIB(n))

/*PROTOLIBn*/

n 为 1,并且使用了 NOTE(LINTLIBRARY)/* LINTLIBRARY */ 时,仅将该指令之后的 .c 文件中的函数原型声明写入库 .ln 文件。缺省值为 0,它取消该进程。

对于 NOTE 格式,必须指定 n

NOTE(SCANFLIKE(n))

NOTE(SCANLIKE(fun_name,n ))

/*SCANFLIKEn*/

NOTE(PRINTFLIKE(n))/* PRINTFLIKEn */ 相同,只是函数定义的第 n 个参数会被视为 [fs]scanf() 格式字符串。缺省情况下,如果标准 C 库提供的 [fs]scanf() 函数调用中存在错误,lint 会发出警告。

对于 NOTE 格式,必须指定 n

NOTE(VARARGS(n))

NOTE(VARARGS(fun_name,n ))

/*VARARGSn*/

禁止对以下函数声明中可变数量的参数执行常规检查。检查前 n 个参数的数据类型;缺少 n 时,会将其视为 0。建议在新代码或更新的代码中,在定义中使用省略号 (...) 作为终结符。

对于其定义在该指令之后的函数,禁止在调用带有 n 个或更多参数的函数时发出以下消息。对于 NOTE 格式,必须指定 n

  • 使用可变数量的参数调用的函数