C标准库源码解剖(10):区域设置函数locale.h
国家、文化和语言规则集称为区域设置,locale.h头文件中定义了区域设置相关的函数。setlocale函数用于设置或返回当前的区域特性,localeconv用于返回当前区域中的数字和货币信息(保存在struct lconv结构实例中)。setlocale的第一个实参指定要改变的区域行为类别,预定义的setlocale类别有:
LC_ALL:所有行为。
LC_COLLATE:strcoll和strxfrm函数的行为。
LC_CTYPE:ctype.h中的字符串处理函数行为。
LC_MONETARY:localeconv返回的币值信息。
LC_NUMERIC:localeconv返回的小数点和非币值信息。
LC_TIME:strftime函数的行为。
locale.h中内容如下:
/* ISO C99 Standard: 7.11 本地化 <locale.h> */
#ifndef _LOCALE_H
#define _LOCALE_H 1
#include <features.h>
#define __need_NULL
#include <stddef.h>
#include <bits/locale.h>
__BEGIN_DECLS
/* 下面是setlocale第一个实参可能的值。代码假设LC_*宏的最小值为0 */
#define LC_CTYPE __LC_CTYPE
#define LC_NUMERIC __LC_NUMERIC
#define LC_TIME __LC_TIME
#define LC_COLLATE __LC_COLLATE
#define LC_MONETARY __LC_MONETARY
#define LC_MESSAGES __LC_MESSAGES
#define LC_ALL __LC_ALL
#define LC_PAPER __LC_PAPER
#define LC_NAME __LC_NAME
#define LC_ADDRESS __LC_ADDRESS
#define LC_TELEPHONE __LC_TELEPHONE
#define LC_MEASUREMENT __LC_MEASUREMENT
#define LC_IDENTIFICATION __LC_IDENTIFICATION
__BEGIN_NAMESPACE_STD
/* 获取数字和货币记号的结构 */
struct lconv
{
/* 数字(非币值)信息 */
char *decimal_point; /* 数字的小数点号 */
char *thousands_sep; /* 数字的千分组分隔符 */
/* 每个元素为相应组中的数字位数,索引越高的元素越靠左边。一个值为CHAR_MAX的元素表示没有更多
的分组了。一个值为0的元素表示前面的元素能用在靠左边的所有分组中 */
char *grouping; /* 数字分组分隔符 */
/* 货币信息 */
/* 前面的三个字符ISO 4217中规定的货币符号,第四个字符是分隔符,第五个字符是'\0' */
char *int_curr_symbol;
char *
相关文档:
char dec2hexChar(short int n) {
if ( 0 <= n && n <= 9 ) {
return char( short('0') + n );
} else if ( 10 <= n && n <= 15 ) {
return char( short('A') + n - 10 );
} else {
return char(0);
}
}
short int h ......
代码:
#include <iostream>
using namespace std;
class Clock
{
int hour, minute, second;
public:
Clock(int h, int m, int s) //构造函数定义 ,无返回值类型
{
if(s<0) second=0;
if (s& ......
我们已经了解如何定义线程入口点函数、调用系统API创建执行指定函数的线程。本节将揭示这一切在系统内部是如何完成的。
图6-1描述了线程创建并完成初始化后的状态。调用CreateThread会使系统产生一个线程内核对象,其引用计数(Usage count)被初始化为2(创建线程的进程和线程本身都引用了该内核对象),其它属性也完成了 ......
下面列举了一些常见的编译器的调用约定
VC6:
调用约定 堆栈清除 参数传递
__cdecl 调用者 从右到左,通过堆栈传递
__stdcall 函数 ......