Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Тут можно читать онлайн Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - бесплатно полную версию книги (целиком) без сокращений. Жанр: Прочая старинная литература, издательство Вильямс, год 0101. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015 краткое содержание

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - описание и краткое содержание, автор Стивен Прата, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать онлайн бесплатно полную версию (весь текст целиком)

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 - читать книгу онлайн бесплатно, автор Стивен Прата
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Справочные материалы 901

Существуют две формы последовательностей UCN. Первая имеет вид \uhexquad, где hexquad — последовательность из четырех шестнадцатеричных цифр; например, \u00F6. Вторая форма записывается как \Uhexquadhexquad, например, \U0000AC01. Поскольку каждая шестнадцатеричная цифра соответствует четырем битам, форма \и может применяться для кодов, представимых 16-битовым целым числом, a \U — для кодов, представимых 32-битовым целым числом.

Если в вашей системе реализованы имена UCN и она включает необходимые символы в расширенный набор символов, то имена UCN могут использоваться в строках, символьных константах и идентификаторах:

wchar_t value\u00F6\u00F8 = L'\u00f6';

Широкие символы

Стандарт С99 посредством библиотек wchar.h и wctype.h обеспечивает еще один вид поддержки для крупных наборов символов посредством применения широких символов. В указанных заголовочных файлах wchar_t определяется как целочисленный тип; точный тип зависит от реализации. Этот тип предназначен для хранения символов из расширенного набора символов, который является надмножеством базового набора символов. По определению типа char достаточно для работы с базовым набором символов. Типу wchar t может потребоваться больше битов для обработки более широкого диапазона значений кодов. Например, char может быть 8-битовым байтом, a wchar_t — 16-битовым unsigned short.

Константы широких символов и строковые литералы обозначаются префиксом L, а для отображения данных с широкими символами можно использовать модификаторы %1с и %ls:

wchar_t wch = L' Я';

wchar_t w_arr[20] = b"являюсь широким!";

printf("%lc %ls\n", wch, w_arr);

Если, к примеру, wchar_t реализован как 2-байтовая единица, то однобайтный код 'Я' должен быть сохранен в младшем байте переменной wch. Символы, не входящие в стандартный набор, могут потребовать обоих байтов для размещения своего кода. Вы можете применять универсальные коды символов для обозначения символов, значения кодов которых выходят за пределы диапазона char:

wchar_t w = L'\u00E2'; /* 16-битовое значение кода */

Массив значений wchar_t может содержать строку широких символов, причем каждый его элемент будет хранить код одиночного широкого символа. Значение wchar_t со значением кода 0 является эквивалентом wchar_t нулевого символа и называется нулевым широким символом. Он используется для завершения строк широких символов.

Для чтения широких символов можно применять спецификаторы %1с и %ls:

wchar_t wchl;

wchar_t w_arr[20];

puts("Введите свою научную степень:");

scanf ("%lc", &wchl);

puts("Введите свою фамилию:");

scanf("%ls",w_arr);

Заголовочный файл wchar.h предоставляет дополнительную поддержку широких символов. В частности, он предлагает функции ввода-вывода широких символов, функции преобразования широких символов и функции манипуляции строками.

902 Приложение Б

По большей части они являются эквивалентами существующих функций, но просто имеют дело с широкими символами. Например, вы можете использовать fwprintf() и wprintf() для вывода, a fwscanf() и wscanf() — для ввода. Главное отличие заключается в том, что эти функции требуют управляющей строки широких символов и работают с потоками ввода и вывода широких символов. Например, следующий фрагмент отображает информацию в виде последовательность широких символов:

wchar_t * pw = b"Указывает на строку широких символов";

int dozen = 12;

wprintf(b"Элемент %d: %ls\n", dozen, pw);

Подобным же образом существуют функции getwchar(), putwchar(), fgetws() и fputws(). В wchar.h определен макрос WE0F, который играет ту же роль, что и EOF для ввода-вывода, ориентированного на байты. Макрос WE0F должен быть значением, которое не соответствует ни одному допустимому символу. Поскольку возможно, что все значения типа wchar t представляют собой допустимые символы, в библиотеке определен тип wint t, который охватывает все возможные значения wchar_t плюс WE0F.

Имеются эквиваленты для функций из библиотеки string.h. Например, wcscpy (ws2, wsl) копирует строку широких символов, указанную посредством wsl, в массив широких символов, на который указывает ws2. Аналогично, для сравнения двух широких строк предусмотрена функция wcscmp() и т.д.

Заголовочный файл wctype.h добавляет к общему набору функции классификации символов. Например, iswdigit() возвращает true, если ее аргумент в виде широкого символа является цифрой, a iswblank() возвращает true, если ее аргумент представляет собой пробельный символ. Стандартными значениями для пробельного символа являются пробел, записанный как L' ', и горизонтальная табуляция, записанная как L’\ t'.

Стандарт С11 через заголовочные файлы uchar.h предоставляет дополнительную поддержку широких символов за счет определения двух типов, предназначенных для соответствия двум распространенным форматам кодирования Unicode. Первый тип, charl6_t, представляет собой наименьший доступный целочисленный тип без знака, который способен хранить 16-битовый код. Он может применяться с формой UCN, содержащей четыре шестнадцатеричные цифры, и схемой кодировки UTF-16 в Unicode:

charl6_t = '\u00F6';

Второй тип, char32_t, определяет наименьший доступный целочисленный тип без знака, способный хранить 32-битовый код. Он может использоваться с формой UCN, содержащей восемь шестнадцатеричных цифры, и схемой кодировки UTF-32 в Unicode:

char32_t = ‘\ U0000AC01';

Для обозначения строк charl6_t и char32_t можно применять префиксы и и U соответственно:

charl6_t ws16[11] = u"Tannh\u00E4user";

char32_t ws32[13] = U"caf\U000000E9 au lait";

Обратите внимание, что эти два типа более специфичны, чем wchar_t. Например, тип wchar t может быть достаточно широк для хранения 32-битовых кодов в одной системе, но иметь ширину для сохранения только 16-битовых кодов в другой системе. Кроме того, два новых типа совместимы с синтаксисом C++.

Справочные материалы 903

Широкие и многобайтные символы

Широкие и многобайтные символы — это два разных подхода к обработке расширенных наборов символов. Многобайтный символ может быть представлен одним, двумя, тремя и более байтами. Все широкие символы будут иметь одинаковую ширину. Многобайтные символы могут использовать состояние сдвига (т.е. байт, который определяет, как должны интерпретироваться последующие байты); широкие символы не поддерживают состояние сдвига. Файл многобайтных символов может быть прочитан в обычный массив char с помощью стандартных функций ввода; файл широких символов должен быть прочитан в массив широких символов с применением одной из функций ввода широких символов.

Стандарт С99 через библиотеку wchar.h предоставляет функции, предназначенные для выполнения преобразований между многобайтным представлением и представлением wchar_t. Функция mbrtowc() преобразует многобайтный символ в широкий, а функция wcrtomb() — широкий символ в многобайтный. Подобным же образом функция mbstrtowcs() преобразует многобайтную строку в строку широких символов, а функция wcstrtombs() — строку широких символов в многобайтную.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Стивен Прата читать все книги автора по порядку

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




Язык программирования C. Лекции и упражнения (6-е изд.) 2015 отзывы


Отзывы читателей о книге Язык программирования C. Лекции и упражнения (6-е изд.) 2015, автор: Стивен Прата. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x