JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.2:C 用户指南
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.4.7 第三个示例:整型常量

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.6.6 volatile 用法示例

6.7 多字节字符和宽字符

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

6.7.2 编码变种

6.7.3 宽字符

6.7.4 转换函数

6.7.5 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.  K&R Solaris Studio C 与 Solaris Studio 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_NUMERICLC_MONETARY 种类的货币信息的结构。这是唯一的一个其行为依赖于多个种类的函数。对于数值,结构描述小数点字符、千位分隔符和分隔符应在的位置。有十五个描述如何格式化货币值的其他结构成员。

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

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