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.9 国际化

6.7 多字节字符和宽字符介绍了标准库的国际化。本节讨论受影响的库函数,并提供一些关于应如何编写程序以便利用这些功能的准则。本节只讨论关于 1990 ISO/IEC C 标准的国际化。1999 ISO/IEC C 标准并未进行重大扩展以支持此处讨论之外的国际化。

6.9.1 语言环境

任何时候,C 程序都有当前语言环境:描述适合于某个民族、文化和语言的惯例的信息集合。语言环境具有字符串名称。唯一的两个标准化语言环境名称为 "C" 和 ""。每个程序在 "C" 语言环境中启动,这导致所有库函数像过去一样工作。"" 语言环境是实现在选择适合程序的调用的正确惯例集时的首选。"C" 和 "" 可导致相同的行为。实现可能提供其他语言环境。

为了实用和方便,语言环境被划分为一系列种类。程序可更改整个语言环境,或者只更改一个或多个种类。通常,每个种类影响与受其他种类影响的函数分开的函数集,因此将一个种类临时更改一段有限持续时间会有意义。

6.9.2 setlocale() 函数

setlocale() 函数是指向程序语言环境的接口。使用调用国家惯例的任何程序在程序执行路径的开头部分应发出如下例所示的一个调用。

#include <locale.h>
/*...*/
setlocale(LC_ALL, "");

该调用导致程序的当前语言环境更改为相应的本地版本,因为 LC_ALL 是指定整个语言环境而不是某个种类的宏。标准种类包括:

LC_COLLATE

排序信息

LC_CTYPE

字符分类信息

LC_MONETARY

货币输出信息

LC_NUMERIC

数值输出信息

LC_TIME

日期和时间输出信息

这些宏中的任何宏均可作为 setlocale() 的第一个参数传递以指定该种类。

setlocale() 函数返回给定种类的当前语言环境的名称(或 LC_ALL),当其第二个参数为空指针时,它仅用于查询。因此,类似如下示例的代码可用于在有限持续时间内更改语言环境或其中一部分:

#include <locale.h>
/*...*/
char *oloc;
/*...*/
oloc = setlocale(LC_category, NULL);
if (setlocale(LC_category, "new") != 0)
{
        /* use temporarily changed locale */
    (void)setlocale(LC_category, oloc);
}

大多数程序不需要此功能。

6.9.3 更改的函数

只要可能并且适当,就会将现有库函数扩展为包括与语言环境相关的行为。这些函数分为两组:

对于附加字符,如果当前语言环境的 LC_CTYPE 种类不是 "C",则除 isdigit() 和 isxdigit() 之外的所有 ctype.h 判定函数都可返回非零(真)值。在西班牙语言环境中,isalpha(’?’) 应为真。同样,字符转换函数 tolower() 和 toupper() 应相应地处理 isalpha() 函数标识的任何额外字母字符。ctype.h 函数通常是使用由字符参数索引的查表而实现的宏。通过将表重新设置为新语言环境的值可更改这些函数的行为,因此没有性能影响。

当前语言环境的 LC_NUMERIC 种类不是 "C" 时,写入或解释可输出浮点值的那些函数可以更改为使用非句点 (.) 的小数点字符。不存在将任何数值转换为包含千位分隔符类型字符的可输出形式的规定。从可输出形式转换为内部形式时,允许实现接受此类附加形式,同样是在非 "C" 语言环境中。使用小数点字符的函数是 printf() 和 scanf() 系列、atof() 以及 strtod()。允许实现定义的扩展的函数是 atof()、atoi()、atol()、strtod()、strtol()、strtoul() 和 scanf() 系列。

6.9.4 新函数

某些语言环境相关的功能是以新标准函数的形式添加的。除了 setlocale()(它允许控制语言环境本身)之外,该标准还包括以下新函数:

localeconv()

数值/货币转换

strcoll()

两个字符串的整理顺序

strxfrm()

转换字符串以便整理

strftime()

设置日期和时间的格式

此外,还有多字节函数 mblen()、mbtowc()、mbstowcs()、wctomb() 和 wcstombs()。

localeconv() 函数返回一个指针,该指针指向包含对设置数值格式有用的信息以及适合当前语言环境的 LC_NUMERIC 和 LC_MONETARY 种类的货币信息的结构。这是唯一的一个其行为依赖于多个种类的函数。对于数值,结构描述小数点字符、千位分隔符和分隔符应在的位置。其他十五个结构成员描述如何格式化货币值。

strcoll() 函数类似于 strcmp() 函数,只是它根据当前语言环境的 LC_COLLATE 种类比较两个字符串。strxfrm() 函数也可用于将一个字符串转换为另一个字符串,以便任何两个此类转换后字符串均可以传递到 strcmp(),并且产生与 strcoll() 传递两个预转换字符串时返回的排序类似的排序。

strftime() 函数提供与 sprintf() 对 struct tm 中的值使用的格式设置类似的格式设置,并提供依赖当前语言环境的 LC_TIME 种类的某些日期和时间表示。此函数基于 ascftime() 函数,后者作为 UNIX System V 发行版 3.2 的一部分发行.