本章提供有关下列内容的信息:
本节简要介绍在 Sun Studio 12 C 5.9 编译器发行版中引入的 C 编译器的新特性和新功能。
C 编辑器现在可以在下列 Linux 分发(x86 和 x64)上使用。
带有 Service Pack 3 的 SuSE Linux Enterprise Server 9(或更高版本)。
Red Hat Enterprise Linux 4。
其他基于 2.6 内核的 Linux 分发,可是这些分发不受正式支持。
用于确定内存模型的新 -m32|-m64 选项。
-xarch 的新标志可替换过时标志。
-xtarget 和 -xchip 的新值可为 UltraSPARC T2 和 SPARC64vi 处理器提供代码生成。
-fma=fused 的新标志可在支持浮点乘加指令的处理器上生成这些指令。
x86 平台和 SPARC 平台上接受的显式预取宏。(-xprefetch=explicit)
在本发行版中,指定 32 位或 64 位二进制编译的方法发生改变。B.2.68 -xarch=isa选项不再携带隐式内存模型 32 位 ILP32 或 64 位 LP64 及其定义,该选项现在仅用于指定目标处理器的指令集。
使用新的 B.2.41 -m32|-m64 选项可指定目标编译的内存模型。
ILP32 模型指定 C 语言 int、long 和 pointer 数据类型均为 32 位。LP64 模型指定 long 和 pointer 数据类型均为 64 位。Solaris 和 Linux OS 还支持 LP64 内存模型下的大型文件和大型数组。
如果使用 -m64 进行编译,作为结果得到的可执行文件仅在运行 64 位内核的 Solaris OS 或 Linux OS 下的 64 位 UltraSPARC(R) 或 x86 处理器上有效。只能在支持 64 位执行的 Solaris 或 Linux OS 上对 64 位对象进行编译、链接和执行。
针对 x86 Solaris 平台进行编译时,有一些重要问题值得注意。
传统的 Sun 样式的并行 pragma 在 x86 上不可用。请改用 OpenMP。有关将传统并行指令转换为 OpenMP 的信息,请参见《Sun Studio 12: OpenMP API User’s Guide》。
在 -xarch 设置为 sse、sse2、sse2a 或 sse3 的情况下进行编译的程序,只能在提供相应扩展和功能的平台上运行。
从 Solaris 9 4/04 开始的 Solaris OS 发行版在 Pentium 4 兼容的平台上支持 SSE/SSE2。早期版本的 Solaris OS 不支持 SSE/SSE2。如果所运行的 Solaris OS 不支持由 -xarch 选定的指令集,则编译器无法为该指令集生成链接代码。
如果在不同的步骤中进行编译和链接,请始终使用编译器和相同的 -xarch 设置进行链接,以确保链接正确的启动例程。
在 x86 上得到的数值结果可能与在 SPARC 上得到的结果不同,这是由 x86 80 位浮点寄存器造成的。为了最大程度地减少这些差异,请使用 -fstore 选项,或使用 x-arch=sse2 进行编译(如果硬件支持 SSE2)。
因为内函数数学库(例如,sin(x))不同,所以 Solaris 和 Linux 之间的数值结果也会不同。
从 Sun Studio 11 和 Solaris 10 OS 开始,会对使用这些专用的 -xarch 硬件标志编译和生成的程序二进制文件进行验证,看它们是否在适当的平台上运行。
在 Solaris 10 之前的系统中,不执行任何验证,用户负责确保使用这些标志生成的对象部署在合适的硬件上。
如果在没有相应功能或指令集扩展的平台上运行使用这些 -xarch 选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息。
此警告还适用于使用利用了 SSE、SSE2、SSE2a 和 SSE3 指令及扩展的 .il 内联汇编语言函数或 __asm() 汇编程序代码的程序。
本书中所用术语 C99 是指 ISO/IEC 9899:1999 C 编程语言。术语 C90 是指 ISO/IEC 9899:1990 C 编程语言。
此编译器在早于 Solaris 10 软件的操作系统上支持 ISO/IEC 9899:1999(编程语言-C 标准)中指定的大多数语言功能。如果指定 -xc99=all,lib,此编译器在 Solaris 10 软件上完全遵循 C99 标准。
此编译器还遵循 ISO/IEC 9899:1990(编程语言-C 标准)。
由于此编译器还支持传统的 K&R C(Kernighan 和 Ritchie,即 ANSI 之前的 C),因此便于迁移到 ISO C。
有关 C90 实现特定行为的信息,请参见D.1.17 _Pragma。
有关支持的 C99 特性的更多信息,请参见表 C–6。
C 编译器的自述文件强调了关于编译器的重要信息,其中包括:
在手册印刷之后发现的信息
新特性和更改的特性
软件更正
问题和解决办法
限制和不兼容
要查看 C 自述文件的文本格式文件,请在命令提示符下键入以下内容:
example% cc -xhelp=readme |
要访问自述文件的 HTML 格式文件,请在 Netscape Communicator 4.0 或兼容版本的浏览器中打开以下文件:
/opt/SUNWspro/docs/index.html
(如果 C 编译器软件未安装在 /opt 目录中,请询问系统管理员以获取系统中的等效路径。)浏览器可以显示 HTML 文档的索引。要打开自述文件,请在索引中找到其对应条目,然后单击标题。
联机手册 (man) 页提供了有关命令、函数、子例程的当前文档或此类内容的集合。
可以通过运行以下命令来显示手册页:
example% man topic |
在整个 C 文档中,手册页参考以主题名称和手册节编号显示:cc(1) 通过 man cc 进行访问。例如,可在 man 命令中使用 -s 选项来访问 ieee_flags(3M) 指示的其他部分:
example% man -s 3M ieee_flags |
C 编译系统由一个编译器、一个汇编程序和一个链接编辑器组成。cc 命令会自动调用这些组件中的每个组件,除非您使用命令行选项另行指定。
表 A–15 介绍了 cc 的所有可用选项。
下图显示 C 编译系统的组织结构。
组件 |
说明 |
使用说明 |
---|---|---|
预处理程序 |
仅适用于 -Xs |
|
编译器(用于非 Xs 模式的内置预处理程序) | ||
静态同步错误检测 |
(SPARC) |
|
代码优化器 |
-O、-xO2、-xO3、-xO4、-xO5、-fast |
|
汇编程序 | ||
代码生成器、内联函数、汇编程序 |
(SPARC) |
|
过程间优化器 |
(SPARC) |
|
后优化器 |
(SPARC) |
|
中间代码翻译者 |
(x86) |
|
代码生成器 |
(x86) |
|
过程间调用分析器 |
(x86) |
|
链接程序 | ||
处理注释部分 |
-mr |
有多种工具可用来帮助您开发、维护和改进 C 程序。本书中介绍了两个与 C 联系最紧密的工具:cscope 和 lint。此外,每个工具均有手册页。
还提供了其他用于源代码浏览、调试和性能分析的工具。有关更多信息,请参见访问 Sun Studio 文档。