本节简要介绍在 Sun Studio 12 C++ 5.9 编译器发行版中引入的 C 编译器的新特性和新功能。有关详细的说明,请参见每项的交叉引用。
现在,可以在以下 Linux 分发(x86 和 x64)上使用 C 编译器:
带有 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 位二进制的编译的方式已更改。A.2.107 –xarch=isa 选项不再采取隐式内存模式(32 位 ILP32 或 64 位 LP64,使用其各自定义),现在仅用于指定目标处理器的指令集。
请使用新的A.2.50 -m32|-m64选项来指定目标编译的内存模型。
ILP32 模型指定 C 语言的 int、long 和指针数据类型的宽度都是 32 位。LP64 模型指定 long 和指针数据类型的宽度都是 64 位。Solaris 和 Linux OS 还支持 LP64 内存模型下的大型文件和大型数组。
如果使用 -m64 编译,则生成的可执行文件仅能在运行 64 位内核的 Solaris OS 或 Linux OS 下的 64 位 UltraSPARC(R) 或 x86 处理器上运行。64 位对象的编译、链接和执行只能在支持 64 位执行的 Solaris 或 Linux OS 上进行。
针对 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)。
Solaris 和 Linux 的数值结果也可能不同,因为内部数学库(如 sin(x))并不相同。
从 Sun Studio 11 和 Solaris 10 OS 开始,会对使用这些专用的 -xarch 硬件标志编译和生成的程序二进制文件进行验证,看其是否在适当的平台上运行。
在 Solaris 10 之前的系统中,不执行任何验证,用户负责确保使用这些标志生成的对象部署在合适的硬件上。
如果在没有相应功能或指令集扩展的平台上运行使用这些 -xarch 选项编译的程序,则可能会导致段故障或不正确的结果,并且不显示任何显式警告消息。
此警告还适用于使用利用 SSE、SSE2、SSE2a 和 SSE3 指令和扩展的 .il 内联汇编语言函数或 __asm() 汇编程序代码。
C++ 编译器 (CC) 支持 C++ ISO 国际标准 ISO IS 14882:1998,编程语言-C++。当前发行版本附带的自述文件描述了与标准需求的所有差异。
在 SPARCTM 平台上,编译器提供了对 SPARC V8 和 SPARC V9(包括 UltraSPARCTM 实现)优化开发功能的支持。在 Prentice-Hall for SPARC International 发行的第 8 版 (ISBN 0-13-825001-4) 和第 9 版 (ISBN 0-13-099227-5) SPARC Architecture Manual 中定义了这些功能。
在本文档中,“标准”是指与上面列出的标准版本相一致。“非标准”或“扩展”是指这些标准的这些版本之外的功能。
负责标准的一方可能会不时地修订这些标准。C++ 编译器兼容的适用标准版本可能被修订或替换,这将会导致以后的 Sun C++ 编译器发行版本在功能上与旧的发行版本产生不兼容。
C++ 编译器的自述文件列出了关于编译器的重要信息,其中包括:
在手册印刷之后发现的信息
新特性和更改的特性
软件更正
问题和解决办法
限制和不兼容
可发送库
未实现的标准
要查看 C++ 自述文件的文本格式文件,请在命令提示符后输入以下命令:
example% CC -xhelp=readme |
要访问此自述文件的 HTML 版本,请在 Netscape Communicator4.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++ 实用程序现已并入传统的 UNIX® 工具并且与 UNIX 操作系统捆绑在了一起:
lex-生成用于文本简单词法分析的程序
yacc-根据语法生成 C 函数分析输入流
prof-生成程序模块的执行配置文件
gprof-按过程来配置程序运行时性能
tcov-按语句来配置程序运行时性能
有关这些 UNIX 工具的详细信息,请参见《 Program Performance Analysis Tools》和相关手册页。
此发行版本的 C++ 支持使用英语以外的其他语言进行应用程序的开发,包括了大多数欧洲语言和日语。因此,您可以十分便捷地将应用程序从一种语言切换到另一种语言。此功能被称为国际化。
通常,C++ 编译器按如下方式实现国际化:
C++ 从国际化的键盘识别 ASCII 字符(也就是说,它具有键盘独立性和 8 位清除)。
C++ 允许使用本地语言打印某些消息。
C++ 允许在注释、字符串和数据中使用本地语言。
C++ 只支持符合扩展 UNIX 字符 (Extended UNIX Characte, EUC) 的字符集,在该字符集中,字符串内每个空字节是一个空字符,而字符串内每个 ascii 值为 "/" 的字节是一个 "/" 字符。
变量名称不能国际化,必须使用英文字符集。
您可以设置语言环境将应用程序从一种本地语言更改为另一种语言。关于这一点和其他本地语言支持功能的信息,请参见操作系统文档。