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.6 lint 参考和示例

本节提供有关 lint 的参考信息,包括由 lint 执行的检查、lint 库以及 lint 过滤器。

4.6.1 由 lint 执行的诊断

对以下三大类情况执行特定于 lint 的诊断:不一致的使用、不可移植的代码以及可疑的构造。本节将研究在每种条件下 lint 的行为示例,并针对它们引起的问题提供可能的解决方法建议。

4.6.1.1 一致性检查

在文件内部以及各文件之间检查使用变量、参数和函数的不一致性。一般说来,对原型的使用、声明和参数执行的检查lint 对旧样式函数执行的检查相同。如果程序未使用函数原型,lint 将比编译器更严格地检查每个函数调用中参数的数量和类型。lint 还标识 [fs]printf()[fs]scanf() 控制字符串中转换定义和参数之间的不匹配。

示例:

4.6.1.2 可移植性检查

一些不可移植的代码在其缺省行为中带有 lint 标志,当用 -p -Xc 调用 lint 时,会诊断额外的几种情况。后者导致 lint 检查不符合 ISO C 标准的构造。有关使用 -p-Xc 时发出的消息,请参见4.6.2 lint

示例:

4.6.1.3 可疑的构造

lint 会标记那些不能表达程序员意图的各种合法构造。示例:

4.6.2 lint

可以使用 lint 库检查程序是否与已在其中进行调用的库函数兼容,其中包括函数返回类型的声明以及函数所预期参数的数量和类型等。标准 lint 库与 C 编译系统提供的库对应,并且通常存储在系统上的标准位置。按照约定,lint 库的名称采用 llib-lx.ln 形式。

缺省情况下,lint 标准 C 库 llib-lc.ln 将附加到 lint 命令行末尾。通过调用 -n 选项可以禁止检查与该库的兼容性。其他 lint 库作为 -l 的参数进行访问。以下示例指示 lint 检查 file1.cfile2.c 中函数和变量的用法是否与 lintllib-l x.ln 兼容。

% lint -lx file1.c file2.c

仅由定义组成的库文件完全作为普通源文件和普通 .ln 文件处理,区别在于不会针对以下情况发出错误消息:函数和变量在库文件中的用法不一致,或者函数和变量在库文件中已定义但未在源文件中使用。

要创建您自己的 lint 库,请在 C 源文件的开头插入指令 NOTE(LINTLIBRARY),然后使用 -o 选项以及指定给 -l 的库名称针对该文件调用 lint:以下示例仅导致源文件中以 NOTE(LINTLIBRARY) 开头的定义写入文件 llib-lx .ln 中。

% lint -ox file1.c file2.c

请注意 lint -occ -o 的类似性。可以相同的方式从函数原型声明的文件创建库,不同的是必须在声明文件的最前面插入 NOTE(LINTLIBRARY)NOTE(PROTOLIB(n))。如果 n 为 1,则原型声明写入库 .ln 文件,这与旧样式的定义相同。如果 n 为 0(缺省 值),则取消该进程。使用 -y 调用 lint 是创建 lint 库的另一种方法。以下命令行导致该行中命名的每个源文件被视为以 NOTE(LINTLIBRARY) 开头,并且只有其定义被写入 llib-lx.ln

% lint -y -ox file1.c file2.c

缺省情况下,lint 在标准位置搜索 lint 库。要指示 lint 在非标准位置的目录中搜索 lint 库,请使用 -L 选项指定目录路径:

% lint -Ldir -lx file1.c file2.c

在增强模式下,lint 生成 .ln 文件,这些文件存储的信息比在基本模式下生成的 .ln 文件存储的信息多。在增强模式下,lint 可以读取和理解由基本或增强 lint 模式生成的所有 .ln 文件。在基本模式下,lint 只能读取和理解由基本 lint 模式生成的 .ln 文件。

缺省情况下,lint 使用 /usr/lib 目录中的库。这些库采用基本 lint 格式。可以运行一次 makefile,并以新格式创建增强 lint 库,从而使增强 lint 更有效地工作。要运行 makefile 并创建新库,请使用以下命令:

% cd install-directory/prod/src/lintlib; make

其中 install-directory 为安装目录。运行 makefile 之后,lint 在增强模式下使用新库,而不是使用 /usr/lib 目录中的库。

将先搜索标准位置,然后再搜索指定的目录。

4.6.3 lint 过滤器

lint 过滤器是特定于项目的后处理程序,通常使用 awk 脚本或类似程序读取 lint 的输出,并放弃项目认为没有标识真正问题的消息,例如,对于字符串函数,返回值有时或总是被忽略。当 lint 选项和指令未提供对输出的足够控制时,lint 过滤器会生成定制的诊断报告。

lint 的两个选项在开发过滤器的过程中特别有用: