Sun Studio 12:C 用户指南

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

本章总结了按功能分组的 C 编译器选项。表 A–15 对这些选项以及编译器命令行语法进行了详细地说明。

A.1 按功能汇总的选项

在本附录中,编译器选项按功能进行分组,以便提供快速参考。有关各个选项的详细说明,请参阅表 A–15附录 B,C 编译器选项参考。某些标志用于多个目的,因此出现多次。

除非另有说明,否则选项适用于所有平台;基于 SPARC 的系统上的 Solaris 操作系统的特有功能标识有 (SPARC),而基于 x86 的系统上的 Solaris 操作系统的特有功能标识有 (x86)

A.1.1 优化和性能选项

表 A–1 优化和性能选项表

选项 

操作 

-fast

选择编译选项的最佳组合,以加快可执行代码的编译速度。

-fma

(SPARC) 允许自动生成浮点乘加指令。 

-p

准备目标代码,以便收集数据进行文件配置。

-xalias_level

(SPARC) 允许编译器执行基于类型的别名分析和优化。

-xbinopt

准备二进制文件,以便随后进行优化、转换和分析。

-xbuiltin

改进对调用标准库函数的代码的优化。

-xcrossfile

允许跨源文件的优化和内联。

-xdepend

(SPARC) 分析循环以了解迭代间数据依赖性并执行循环重构。

-xF

允许链接程序对数据和函数重新排序。

-xhwcprof

(SPARC) 允许编译器支持基于硬件计数器的分析。

-xinline

尝试仅内联指定函数。

-xinstrument

对您的程序进行编译和程序校验,以便由线程分析器进行分析。 

-xipo

(SPARC) 通过调用过程间分析组件对整个程序执行优化。

-xipo_archive

允许交叉文件优化包含归档库 (.a)。

-xjobs

设置编译器创建的进程数。

-xlibmil

内联某些库例程以加快执行速度。

-xlic_lib=sunperf

Sun 提供的性能库中进行链接。

-xlinkopt

对可重定位目标文件执行链接时优化。

-xlibmopt

启用已优化数学例程的库。

-xmaxopt

命令会将 pragma opt 级别限制为指定级别。

-xnolibmil

内联数学库例程。

-xnolibmopt

禁用已优化数学例程的库。

-x0

优化目标代码。

-xnorunpath

禁止在可执行文件中包含共享库的运行时搜索路径。 

-xpagesize

设置栈和堆的首选页面大小。

-xpagesize_stack

设置栈的首选页面大小。

-xpagesize_heap

设置堆的首选页面大小。

-xpch

缩短其源文件共享同一组 include 文件的应用程序的编译时间。

-xpchstop

可与 -xpch 结合使用以指定活前缀的最后一个 include 文件。

-xpentium

(x86) 针对 PentiumTM 处理器进行优化。

-xprefetch

(SPARC) 启用预取指令。

-xprefetch_level

(SPARC) 控制 -xprefetch=auto 设置的自动插入预取指令的主动性。

-xprefetch_auto_type

(SPARC) 控制生成间接预取指令的方式。

-xprofile

为配置文件收集数据或使用配置文件进行优化。

-xprofile_ircache

通过重用 -xprofile=collect 阶段保存的编译数据缩短 -xprofile=use 阶段的编译时间。

-xprofile_pathmap

支持单个配置文件目录中的多个程序或共享库。

-xrestrict

(SPARC) 将返回赋值指针的函数参数视为限定指针。

-xsafe

(SPARC) 允许编译器假定不会发生基于内存的陷阱。

-xspace

不对增加代码大小的循环执行优化和并行化。

-xunroll

建议优化器解开循环 n 次。

A.1.2 编译时选项和链接时选项

下表列出了在链接时和编译时都必须指定的选项。

表 A–2 编译时选项和链接时选项表

选项 

操作 

-fast

选择编译选项的最佳组合,以加快可执行代码的编译速度。

-m32|-m64

为编译的二进制对象指定内存模型。 

-mt

扩展-D_REENTRANT -lthread 的宏选项。

-p

准备目标代码,以便收集数据使用 prof(1) 进行文件配置。

-xarch

指定指令集体系结构。

-xautopar

(SPARC) 针对多处理器启用自动并行化。

-xexplicitpar

(SPARC) 根据 #pragma MP 指令规范生成并行化代码。

-xhwcprof

(SPARC) 允许编译器支持基于硬件计数器的分析。

-xipo

(SPARC) 通过调用过程间分析组件对整个程序执行优化。

-xlinkopt

对可重定位目标文件执行链接时优化。

-xmemalign

(SPARC) 指定最大假定内存对齐以及未对齐数据访问的行为。

-xopenmp

(SPARC) 支持显式并行化 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。

-xpagesize

设置栈和堆的首选页面大小。

-xpagesize_stack

设置栈的首选页面大小。

-xpagesize_heap

设置堆的首选页面大小。

-xparallel

(SPARC) 循环的并行化既可由编译器自动完成,也可由程序员显式指定。

-xpg

准备目标代码,以便收集数据使用 gprof(1) 进行文件配置。

-xprofile

为配置文件收集数据或使用配置文件进行优化。

-xsb

源代码浏览器生成附加符号表信息。

-xvector

启用自动生成对向量库函数的调用。

A.1.3 数据对齐选项

表 A–3 数据对齐选项表

选项 

操作 

-xchar_byte_order

通过按指定字节顺序排列多字符字符常量的字符来生成整型常量。

-xdepend

(SPARC) 分析循环以了解迭代间数据依赖性并执行循环重构。

-xmemalign

(SPARC) 指定最大假定内存对齐以及未对齐数据访问的行为。

-xopenmp

(SPARC) 支持显式并行化 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。

A.1.4 数值和浮点选项

表 A–4 数值和浮点选项表

选项 

操作 

-flteval

(x86) 控制浮点计算。

-fma

(SPARC) 允许自动生成浮点乘加指令。 

-fnonstd

导致对浮点运算硬件的非标准初始化。

-fns

(SPARC) 启用 SPARC 非标准浮点模式。

-fprecision

(x86) 初始化浮点控制字中的舍入精度模式位。

-fround

设置程序初始化期间运行时建立的 IEEE 754 舍入模式。

-fsimple

允许优化器对有关浮点运算作出简化假定。

-fsingle

导致编译器按单精度而非双精度计算 float 表达式。

-fstore

(x86) 导致编译器将浮点表达式或函数的值转换为赋值左侧的类型。

-ftrap

设置 IEEE 754 捕获模式在启动时生效。

-nofstore

(x86)将浮点表达式或函数的值转换为赋值左侧的类型。

-xdepend

(SPARC) 分析循环以了解迭代间数据依赖性并执行循环重构。

-xlibmieee

强制 IEEE 754 样式在异常情况下返回数学例程值。

-xopenmp

(SPARC) 支持显式并行化 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。

-xsfpconst

无后缀浮点常量表示为单精度。

-xvector

启用自动生成对向量库函数的调用。

A.1.5 并行化选项

表 A–5 并行化选项表

选项 

操作 

-mt

扩展-D_REENTRANT -lthread 的宏选项。

-xautopar

(SPARC) 针对多处理器启用自动并行化。

-xcheck

(SPARC) 针对栈溢出增加运行时检查。

-xdepend

(SPARC) 分析循环以了解迭代间数据依赖性并执行循环重构。 

-xexplicitpar

(SPARC) 根据 #pragma MP 指令规范生成并行化代码。

-xloopinfo

(SPARC) 显示已并行化的循环和未并行化的循环。

-xopenmp

(SPARC) 支持显式并行化 OpenMP 接口,包括一组源代码指令、运行时库例程和环境变量。

-xparallel

(SPARC) 循环的并行化既可由编译器自动完成,也可由程序员显式指定。

-xreduction

(SPARC) 自动并行化期间启用约简识别。

-xrestrict

(SPARC) 将返回赋值指针的函数参数视为限定指针。 

-xvpara

(SPARC) 对已指定 #pragma MP 指令但可能未针对并行化进行正确指定的循环发出警告。

-xthreadvar

(SPARC)控制线程局部变量的实现。 

-Zll

(SPARC) 为 lock_lint 创建程序数据库,但不生成可执行代码。

A.1.6 源代码选项

表 A–6 源代码选项表

选项 

操作 

-A

name 作为谓词与指定的 token 相关联,这与使用 #assert 预处理指令类似。

-C

阻止预处理程序删除注释(预处理指令行中的注释除外)。

-D

name 与指定的标记相关联,这与使用 #define 预处理指令类似。

-E

仅通过预处理程序运行源文件,并将输出发送到 stdout

-fd

报告 K&R 样式的函数的定义和声明。

-H

将当前编译期间涉及的每个文件的路径名打印到标准错误中,每行一个路径名。

-I

将目录添加到用于搜索具有相对文件名的 #include 文件的列表中。

-P

仅通过 C 预处理程序运行源文件。

-U

删除预处理程序符号 name 的所有初始定义。

-X

-X 选项指定符合 ISO C 标准的各种级别。

-xCC

接受 C++ 样式的注释。

-xc99

控制编译器识别支持的 C99 功能。

-xchar

帮助从字符被定义为无符号类型的系统中迁移。

-xcsi

允许 C 编译器接受在不符合 ISO C 源字符代码要求的语言环境中编写的源代码。

-xM

对指定 C 程序仅运行预处理程序,同时请求生成 makefile 依赖性并将结果发送到标准输出。

-xM1

收集类似 -xM 的依赖性,但 /usr/include 文件除外。

-xP

打印在此模块中定义的所有 K&R C 函数的原型。

-xpg

准备目标代码,以便收集数据使用 gprof(1) 进行文件配置。

-xsb

源代码浏览器生成附加符号表信息。

-xsbfast

源代码浏览器创建数据库。

-xtrigraphs

确定三字符序列的识别。

-xustr

启用对十六位字符构成的串文字的识别。

A.1.7 编译代码选项

表 A–7 编译代码选项表

选项 

操作 

-c

指示编译器禁止与 ld(1) 链接并在当前工作目录中为每个源文件生成一个 .o 文件。

-o

指定输出文件。

-S

指示编译器生成汇编源文件但不汇编程序。

A.1.8 编译模式选项

表 A–8 编译模式选项表

选项 

操作 

-#

启用详细模式,显示命令选项展开的方式以及调用的组件。

-###

显示将要调用的每个组件,但是并不真正执行。还显示命令选项扩展的过程。

-features

确保具有外部内联函数的旧二进制文件与新二进制文件之间的兼容性。

-keeptmp

保留编译期间创建的临时文件,而非将它们自动删除。

-V

指示 cc 在编译器执行时打印每个组件的名称和版本 ID。

-W

C 编译系统组件传递参数。

-X

-X 选项指定符合 ISO C 标准的各种级别。

-xc99

控制编译器识别支持的 C99 功能。

-xchar

保留字符的符号。

-xhelp

显示联机帮助信息。

-xjobs

设置编译器创建的进程数。

-xpch

缩短其源文件共享同一组 include 文件的应用程序的编译时间。

-xpchstop

可与 -xpch 结合使用以指定活前缀的最后一个 include 文件。

-xtemp

cc 使用的临时文件的目录设置为 dir

-xtime

报告每个编译组件所用的时间和资源。

-Y

指定一个新目录查找 C 编译系统组件。

-YA

更改搜索组件的缺省目录。

-YI

更改搜索 include 文件的缺省目录。

-YP

更改查找库文件的缺省目录。

-YS

更改启动目标文件的缺省目录。

A.1.9 诊断选项

表 A–9 诊断选项表

选项 

操作 

-errfmt

字符串 "error:" 作为错误消息的前缀,以便与警告消息区别开来。

-errhdr

将来自头文件的警告限定到指定的组。 

-erroff

禁止编译器警告消息。

-errshort

控制编译器发现类型不匹配时生成的错误消息中的详细信息量。

-errtags

显示每条警告消息的消息标记。

-errwarn

如果发出指示警告消息, cc 将以故障状态退出。

-v

指示编译器执行更严格的语义检查并启用类似 lint 的其他检查。

-w

禁止编译器警告消息。

-xe

对源文件仅执行语法和语义检查,但不生成任何目标代码或可执行代码。

-xtransition

发出关于 K&R C 与 Sun ISO C 之间存在差异的警告。

-xvpara

(SPARC) 对已指定 #pragma MP 指令但可能未针对并行化进行正确指定的循环发出警告。

A.1.10 调试选项

表 A–10 调试选项表

选项 

操作 

-xcheck

针对栈溢出增加运行时检查。

-g

调试器生成附加符号表信息。

-s

删除输出目标文件中的所有符号调试信息。

-xdebugformat

生成 dwarf 格式而非 stabs 格式的调试信息。

-xpagesize

设置栈和堆的首选页面大小。

-xpagesize_stack

设置栈的首选页面大小。

-xpagesize_heap

设置堆的首选页面大小。

-xs

禁用 dbx 的目标文件自动读取。

-xvis

(SPARC) 启用编译器对 VIS[tm] 指令集中定义的汇编语言模板的识别。

A.1.11 链接选项和库选项

表 A–11 链接选项和库选项表

选项 

操作 

-B

指定用于链接的库绑定是 static 还是 dynamic

-d

指定链接编辑器中的链接类型是动态还是静态。

-G

选项传递给链接编辑器,以生成共享对象而非动态链接的可执行内容。

-h

共享动态库指定名称,从而获得库的不同版本。

-i

选项传递给链接程序,以忽略所有 LD_LIBRARY_PATH 设置。

-L

链接程序搜索库的列表中添加目录。

-l

目标库 libname.solibname.a 链接。

-mc

删除目标文件的 .comment 部分中重复的字符串。

-mr

删除 .comment 部分中所有的字符串。也可以向目标文件的该部分中插入一个字符串

-Q

向输出文件发出或不发出标识信息。

-R

将用于指定库搜索目录的、以冒号分隔的目录列表传递给运行时链接程序。

-xMerge

数据段合并到文本段中。

-xcode

指定代码地址空间。

-xldscope

控制变量的缺省作用域和函数定义,以创建更快、更安全的共享库。

-xnolib

缺省情况下,不链接任何库。

-xnolibmil

内联数学库例程。

-xstrconst

串文字插入文本段(而非缺省数据段)的只读数据部分。

A.1.12 目标平台选项

表 A–12 目标平台选项表

选项 

操作 

-m32|-m64

为编译的二进制对象指定内存模型。 

-xarch

指定指令集体系结构。

-xcache

定义供优化器使用的高速缓存特性。

-xchip

指定供优化器使用的目标处理程序。

-xregs

(SPARC) 为生成的代码指定寄存器的用法。

-xtarget

指令集和优化指定目标系统。

A.1.13 x86 特定选项

表 A–13 x86 特定选项表

选项 

操作 

-flteval

控制浮点计算。

-fprecision

初始化浮点控制字中的舍入精度模式位。

-fstore

导致编译器将浮点表达式或函数的值转换为赋值左侧的类型。

-nofstore

将浮点表达式或函数的值转换为赋值左侧的类型。

-xmodel

针对 Solaris x86 平台修改 64 位对象的形式。

-xpentium

针对 Pentium 处理器进行优化。

A.1.14 许可证选项

表 A–14 许可证选项表

选项 

操作 

-xlicinfo

返回有关许可证系统的信息。

A.1.15 废弃的选项

下表列出了已废弃的选项。请注意,编译器仍可接受这些选项,但在以后的版本中可能不接受这些选项。所以,请尽快开始使用建议的替代选项。

表 A–15 废弃选项表

选项 

操作 

-dalign

改用 -xmemalign=8s

-KPIC (SPARC)

改用 -xcode=pic32

-Kpic (SPARC)

改用 -xcode=pic13

-misalign

改用 -xmemalign=1i

-misalign2

改用 -xmemalign=2i

-x386

改用 -xchip=generic

-x486

改用 -xchip=generic

-xa

改用 -xprofile=tcov

-xcg

改用 -O,以利用 -xarch-xchip-xcache 的缺省值。

-xnativeconnect

废弃,没有替代选项。 

-xprefetch=yes

改用 -xprefetch=auto,explicit

-xprefetch=no

改用 -xprefetch=no%auto,no%explicit

-xtarget=386

改用 -xtarget=generic

-xtarget=486

改用 -xtarget=generic