Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4133

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 32. Обработка исключительных ситуаций <signal.h> 

381 

  if(raise(SIGINT)) 
  { 
    printf("Raise failed.\n"); 
    return 2; 
  } 
  printf("OK.\n"); 
  /* восстанавливаем предыдущий обработчик */ 
  signal(SIGINT, f); 
  return 0; 

 


background image

  

 
 

Г Л А В А  

33 

 
 
 

Поддержка локализации 

<locale.h> 

Заголовочный  файл  locale.h  предназначен  для  управления  пред-
ставлением и обработкой данных, специфических для различных 
регионов. Кроме специфических определений, в этом заголовоч-
ном файле также определен макрос 

NULL

33.1. Локальность 

Информация,  описывающая  представление  и  правила  обработки 
данных для какого-то региона, называется 

локальностью

 (locale). 

Процесс  преобразования  данных  в  локальное  представление  на-
зывается 

локализацией

Каждая  локальность  имеет  имя,  которое  задается  символьной 
строкой. В стандарте языка программирования C предопределены 
имена двух локальностей: 

 

"C"

 — локальность, используемая по умолчанию; 

 

""

 — местная (native) локальность. 

В конкретной реализации могут быть также определены и другие 
локальности. 

Перед  передачей  управления  программе  среда  исполнения  уста-
навливает локальность 

"C"

  

 


background image

Глава 33. Поддержка локализации <locale.h> 

383 

33.2. Локальные категории 

Локальность разбивается на разделы, каждый из которых содер-
жит информацию, связанную по смыслу или назначению. Разде-
лы локальности нумеруются. Номер раздела локальности называ-
ется 

локальной категорией

. В заголовочном файле locale.h опре-

делены следующие макросы для локальных категорий: 

 

LC_ALL

 — все локальные категории; 

 

LC_COLLATE

 — локальная категория, связанная с работой функ-

ций 

strcoll

 и 

strxfrm

 

LC_CTYPE

 — локальная категория, связанная с работой функций 

классификации символов; 

 

LC_MONETARY

  —  локальная  категория,  связанная  с  форматиро-

ванием денежных значений; 

 

LC_NUMERIC

  —  локальная  категория,  связанная  с  форматирова-

нием данных с плавающей точкой;  

 

LC_TIME

 — локальная категория, связанная с работой функции 

strftime

Каждый  из  этих  макросов  определяет  некоторое  целочисленное 
константное выражение. 
В  заголовочном  файле  locale.h  могут  быть  также  определены  и 
другие локальные категории. 

33.3. Установка локальности 

Для установки локальности, которая будет управлять обработкой 
и форматированием специфических для региона данных, предна-
значена функция 

setlocale

, которая имеет следующий прототип: 

  char *setlocale(int category, const char *

locale

); 

Параметр 

category

  должен  содержать  локальную  категорию,  а 

параметр 

locale

 указывать на имя локальности. 

Функция 

setlocale

  устанавливает  локальную  категорию,  задан-

ную параметром 

category

, из локальности на которую указывает 


background image

Часть III. Стандартная библиотека языка программирования C 

384 

параметр 

locale

.  В  случае  успешного  завершения  функция  воз-

вращает  указатель  на  строку,  описывающую  установленную  ло-
кальность и категорию, а в случае неудачи — 

NULL

Если  в  параметре 

locale

  установить  значение 

NULL

,  то  функция 

вернет указатель на строку, описывающую локальную категорию, 
заданную параметром 

category

 для текущей локальности.  

В  листинге  33.1  приведен  пример  использования  функции 

setlocale

Листинг 33.1. Установка местной локальности 

#include<stdio.h> 
#include<locale.h> 
 
int main(void) 

  char *locale; 
 
  locale = setlocale(LC_ALL, ""); 
  printf("%s\n", locale);  /* Russian_Russia.1251 */ 
  printf("%g\n", 10.5);    /* 10,5 */ 
 
  return 0; 

33.4. Форматы числовых  

и денежных данных 

Информация  о  том,  как  форматировать  числовые  и  денежные 
данные для локального представления, хранится в структуре типа 

lconv

, поля которой: 

  char *decimal_point;  /* символ десятичной точки в не  
    денежных данных */ 
  char *thousands_sep;  /* разделитель для числовых групп  
    слева от десятичной точки в не денежных данных */ 
  char *grouping;  /* строка, задающая количество цифр в  
    каждой группе в не денежных данных; 


background image

Глава 33. Поддержка локализации <locale.h> 

385 

    каждый символ представляет десятичное число, которое  
    обозначает количество цифр в группе;  
    ноль обозначает, что предыдущее значение будет  
    использоваться для всех оставшихся групп; 
    значение CHAR_MAX обозначает, что группировка цифр в числе 
    прекращается */ 
  char *int_curr_symbol;  /* символ денег, определенный  
    стандартом ISO 4217 */ 
  char *currency_symbol;  /* локальный символ денег */ 
  char *mon_decimal_point;  /* символ десятичной точки в  
    денежных данных */ 
  char *mon_thousands_sep;  /* разделитель для числовых групп  
    слева от десятичной точки в денежных данных */ 
  char *mon_grouping;  /* строка, задающая количество цифр в  
    каждой группе в денежных данных; формат строки такой же,  
    как и в поле grouping */ 
  char *positive_sign;  /* знак положительного значения для  
    денежных величин */ 
  char *negative_sign;  /* знак отрицательного значения для  
    денежных величин */ 
  char int_frac_digits;  /* количество цифр после десятичной  
    точки для международного представления денежных данных */ 
  char frac_digits;  /* количество цифр после десятичной точки  
    для представления денежных данных */ 
  char p_cs_precedes;  /* позиция символа денег для  
    положительных денежных значений: 
    0 — символ денег следует за денежным значением; 
    1 — символ денег предшествует денежному значению */ 
  char n_cs_precedes;  /* позиция символа денег для  
    отрицательных денежных значений: 
    0 — символ денег следует за денежным значением; 
    1 — символ денег предшествует денежному значению */ 
  char p_sep_by_space;  /* для положительного денежного  
    значения: 
    0 — символ денег не отделен от денежного значения; 
    1 — символ денег отделен от денежного значения пробелом */ 
  char n_sep_by_space;  /* для отрицательного денежного  
    значения: 
    0 — символ денег не отделен от денежного значения; 
    1 — символ денег отделен от денежного значения пробелом */ 


Смотрите также файлы