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 const 和 volatile

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.8 标准头文件和保留名称

在标准化过程早期,ISO 标准委员会选择包含库函数、宏和头文件作为 ISO C 的一部分。

本节介绍各种保留名称及有关其保留的某些基本原理。最后是一系列规则,遵循这些规则可使程序扫清任何保留名称。

6.8.1 标准头文件

标准头文件包括:assert.h、ctype.h、errno.h、float.h、limits.h、locale.h、math.h、setjmp.h、signal.h、stdarg.h、stddef.h、stdio.h、stdlib.h、string.h、time.h。

大多数实现提供更多头文件,但是严格符合 1990 ISO/IEC 标准的 C 程序只能使用列出的这些头文件。

关于其中某些头文件的内容,其他标准稍有不同。例如,POSIX (IEEE 1003.1) 指定 fdopen 在 stdio.h 中声明。为了允许这两种标准共存,POSIX 要求在包含任何头文件之前对宏 _POSIX_SOURCE 进行 #defined,以保证这些附加名称存在。《X/Open 可移植性指南》对其扩展也使用这种宏方案。X/Open 的宏是 _XOPEN_SOURCE。

ISO C 要求标准头文件同时是自给自足和幂等的。标准头文件之前或之后不需要任何其他头文件进行 #included,并且每个标准头文件可多次进行 #included 而不会导致问题。该标准还要求它的头文件只能在安全上下文中进行 #included,以便保证头文件中使用的名称保持不变。

6.8.2 保留供实现使用的名称

ISO C 标准进一步限制与其库相关的实现。以前,大多数程序员会避免在 UNIX 系统上对他们自己的函数使用 read 和 write 等名称。ISO C 要求实现中的引用仅引入该标准保留的名称。

因此,该标准保留所有可能名称的子集供实现使用。此类名称由标识符组成,标识符以下划线开头,后面是其他下划线或大写字母。此类名称包含与以下常规表达式匹配的所有名称:

_[_A-Z][0-9_a-zA-Z]*

严格地说,如果程序使用此标识符,其行为不确定。因此,使用 _POSIX_SOURCE(或 _XOPEN_SOURCE)的程序具有不确定的行为。

但是,未定义的行为是程度问题。如果在符合 POSIX 标准的实现中使用 _POSIX_SOURCE,则程序的不确定行为包括某些头文件中的某些附加名称,并且该程序仍符合公认的标准。ISO C 标准中的预留漏洞允许实现符合表面上不兼容的规范。另一方面,当遇到 _POSIX_SOURCE 等名称时,不符合 POSIX 标准的实现按任意方式执行。

该标准还保留以下划线开头的所有其他名称,以用于作为常规文件作用域标识符以及作为结构和联合的标记的头文件,但不用于局部作用域。允许以下公共实践:让命名为 _filbuf 和 _doprnt 的函数实现库的隐藏部分。

6.8.3 保留供扩展使用的名称

除了显式保留的所有名称之外,1990 ISO/IEC C 标准还保留供实现和将来标准使用的与某些模式匹配的名称:

表 6-2 保留供扩展使用的名称

文件
保留名称模式
errno.h
E[0-9A-Z].*
ctype.h
(to|is)[a-z].*
locale.h
LC_[A-Z].*
math.h
当前函数名称 [fl]
signal.h
(SIG|SIG_)[A-Z].*
stdlib.h
str[a-z].*
string.h
(str|mem|wcs)[a-z].*

在此列表中,只有在包含相关头文件时,以大写字母开头的名称才是宏并被保留。其余名称可指定函数,不能用于为任何全局对象或函数命名。

6.8.4 可安全使用的名称

可以遵循以下四个简单规则以避免与任何 ISO C 保留名称冲突:

这些规则仅仅是要遵循的一般准则,缺省情况下大多数实现将继续向标准头文件增加名称。