Sun Studio 12:C 用户指南

7.2.2 工具

lint 程序的 -errchk 选项检测潜在的 64 位端口问题。也可以指定 cc -v,该选项指示编译器执行更严格的附加语义检查(与不使用 -v 进行编译相比)。-v 选项还会针对指定文件启用某些类似 lint 的检查。

将代码增强到 64 位安全时,应使用 Solaris 操作系统中出现的头文件,因为这些文件具有 64 位编译环境的派生类型和数据结构的正确定义。

7.2.2.1 lint

使用 lint 检查为 32 位和 64 位编译环境编写的代码。指定 -errchk=longptr64 选项以生成 LP64 警告。同时使用 -errchk=longptr64 标志来检查是否可将代码移植到下述环境中:长整型和指针的长度为 64 位而无格式整型的长度为 32 位。即使使用了显式强制类型转换,-errchk=longptr64 标志也会检查指针表达式和长整型表达式对无格式整型的赋值。

使用 -errchk=longptr64,signext 选项查找符合以下条件的代码:其中标准 ISO C 值保留规则允许在无符号整型表达式中使用带符号整型值的符号扩展。

希望检查仅在 Solaris 64 位编译环境中运行的代码时,请使用 lint-Xarch=v9 选项。希望检查在 x86 64 位环境中运行的代码时,请使用 -Xarch=amd64

当 lint 生成警告时,它将打印错误代码的行号、描述问题的消息以及是否涉及指针。警告消息还指明涉及的数据类型的长度。如果确定涉及指针并且知道数据类型的长度,便可以查找特定的 64 位问题,并避免 32 位和更短类型之间的已有问题。

但请注意,尽管 lint 会提供有关潜在 64 位问题的警告,但也无法检测所有问题。另外在许多情况下,符合应用程序意图且正确无误的代码会生成警告。

通过在上一行中放置 "NOTE(LINTED("<optional message">))" 形式的注释,可以禁止对指定代码行发出警告。希望 lint 忽略某些代码行(如强制类型转换和赋值)时,这种做法会很有用。使用 "NOTE(LINTED("<optional message">))" 注释时请务必谨慎,因为它可能会掩盖真实问题。使用 NOTE 时,请包含 #include<note.h>。有关更多信息,请参阅 lint 手册页。