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 源代码检验器

5.  基于类型的别名分析

6.  转换为 ISO C

6.1 基本模式

6.1.1 -Xc

6.1.2 -Xa

6.1.3 -Xt

6.1.4 -Xs

6.2 新式函数原型

6.2.1 编写新代码

6.2.2 更新现有代码

6.2.3 混合使用的注意事项

6.3 带有可变参数的函数

6.4 提升:无符号保留与值保留

6.4.1 一些历史背景

6.4.2 编译行为

6.4.3 示例:强制类型转换的使用

6.4.4 示例:相同的结果,不发出警告

6.4.5 整型常量

6.4.6 示例:整形常量

6.5 标记化和预处理

6.5.1 ISO C 转换阶段

6.5.2 旧 C 转换阶段

6.5.3 逻辑源代码行

6.5.4 宏替换

6.5.5 使用字符串

6.5.6 标记粘贴

6.6 constvolatile

6.6.1 仅适用于 lvalue 的类型

6.6.2 派生类型中的类型限定符

6.6.3 const 意味着 readonly

6.6.4 const 用法示例

6.6.5 volatile 用法示例

6.7 多字节字符和宽字符

6.7.1 亚洲语言需要多字节字符

6.7.2 编码变化 (Encoding Variations)

6.7.3 宽字符

6.7.4 C 语言特征

6.8 标准头文件和保留名称

6.8.1 标准头文件

6.8.2 保留供实现使用的名称

6.8.3 保留供扩展使用的名称

6.8.4 可安全使用的名称

6.9 国际化

6.9.1 语言环境

6.9.2 setlocale() 函数

6.9.3 更改的函数

6.9.4 新函数

6.10 表达式中的分组和求值

6.10.1 表达式定义

6.10.2 K&R C 重新整理许可证

6.10.3 ISO C 规则

6.10.4 括号用法

6.10.5 As If 规则

6.11 不完全类型

6.11.1 类型

6.11.2 完成不完全类型

6.11.3 声明

6.11.4 表达式

6.11.5 使用原因

6.11.6 示例:不完全类型

6.12 兼容类型和复合类型

6.12.1 多个声明

6.12.2 分别编译兼容性

6.12.3 单编译兼容性

6.12.4 兼容指针类型

6.12.5 兼容数组类型

6.12.6 兼容函数类型

6.12.7 特殊情况

6.12.8 复合类型

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 之间的差异

索引

6.12 兼容类型和复合类型

对于 K&R C,引用同一实体的两个声明可能是不同的;对于 ISO C 更是如此。ISO C 中使用的术语“兼容类型”表示“足够接近”的类型。本节介绍了兼容类型和“复合类型”,后者是合并两种兼容类型而产生的结果。

6.12.1 多个声明

如果只允许 C 程序声明每个对象或函数一次,则不一定需要兼容类型。链接(允许两个或更多声明引用相同实体)、函数原型和分别编译全部需要此功能。独立转换单元(源文件)具有与单个转换单元不同的类型兼容性规则。

6.12.2 分别编译兼容性

由于每个编译可能查看不同的源文件,因此独立编译中的大多数兼容类型规则实质上是结构化的:

6.12.3 单编译兼容性

当相同作用域内的两个声明描述相同的对象或函数时,这两个声明必须指定兼容类型。然后这两种类型合并为与这两种类型兼容的单个复合类型。

兼容类型是递归定义的。底部为类型说明符关键字。这些规则规定,unsigned shortunsigned short int 相同,不带类型说明符的类型与带有 int 的类型相同。所有其他类型仅当派生它们的类型兼容时才为兼容类型。例如,如果限定符 const volatile 是相同的,且未限定基类型是兼容的,则两个限定类型是兼容的。

6.12.4 兼容指针类型

要使两种指针类型兼容,它们指向的类型必须兼容,并且必须对这两个指针进行相同的限定。考虑到指针的限定符在 * 之后指定,因此以下两个声明所声明的两个不同限定指针指向同一类型 int

int *const cpi;
int *volatile vpi;

6.12.5 兼容数组类型

要使两个数组类型兼容,它们的元素类型必须兼容。如果两个数组类型具有指定的大小,则它们必须匹配,即,不完全数组类型(请参见6.11 不完全类型)同时与另一不完全数组类型和一个具有指定大小的数组类型兼容。

6.12.6 兼容函数类型

要使函数兼容,请遵守以下规则:

6.12.7 特殊情况

signed int 的行为与 int 相同,不同之处可能在于位字段,其中无格式 int 可能表示无符号的值。

请注意,每个枚举类型必须与某些整数类型兼容。对于可移植的程序,这意味着枚举类型是独立类型。通常,ISO C 标准将枚举类型视为独立类型。

6.12.8 复合类型

由两个兼容类型构成的复合类型也是递归定义的。兼容类型可能彼此不同的原因在于不完全数组或旧式函数类型。因此,复合类型最简单的描述是,它是与两个原始类型均兼容的类型,包括原始类型中的各个可用数组大小和各个可用参数列表