Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Файл ctype.h

У цьому файлі зберігаються константи і функції (точніше, макровизначення) для того, щоб перевірити приналежність символу до того або іншого класу. У файлі визначені наступні константи – ознаки:

 

Константа Призначення
const char_IS_SP =1 символ – порожнє місце
const char_IS_DIG =2 символ – цифра
const char_IS_UPP =4 символ – велика буква
const char_IS_LOW =8 символ – маленька буква
const char_IS_HEX =16 символ – шестнадцятерична цифра
const char_IS_CTL =32 керуючий символ
const char_IS_PUN =64 символ – знак пунктуації

 

Оскільки такий файл з'явився ще в мові С, константи задані у вигляді макровизначень без параметрів, наприклад:

#define _IS_DIG 2 (define – англ. визначати).

Макровизначення обробляються макрогенератором (частиною компілятора). Макрогенератор просто заміняє ім'я, зазначене після слова define, на ланцюжок символів, зазначений через пробіл після імені. При цьому ніякого аналізу правильності заміни не виробляється.

Відзначимо, що всі ці константи і функції орієнтовані на символи з кодами, меншими 128.

Для прискорення процесу аналізу символу попередньо складена таблиця з 256 елементів – по одному на символ, і для кожного символу заздалегідь обчислені всі ознаки (що константи з таблиці дорівнюють ступеням двійки, тобто відповідають різним розрядам байта).

Коли потрібно проаналізувати символ, просто перевіряється відповідний розряд байта – елемента таблиці, що відповідає цьому символові.

Перевірка виробляється за допомогою операції & - поразрядного множення (поразрядного І) цього байта на відповідну константу, двійковий еквівалент якої містить одиницю тільки в одному розряді.

Функції для аналізу символів виконані як макровизначення з параметром.

Приклад:

# define isprint (c) ((c) >= 0x20 && (c) <= 0x7e)

# define ispunct (c) (_ctype [(c) + 1] & _IS_PUN)

Після імені макровизначення в дужках можна вказати параметр. Тоді підстановка виконується в два етапи – спочатку замість імені макровизначення підставляється його визначення, потім замість параметра підставляється його значення.

Наприклад, якщо десь у програмі ми написали isprint ( 'A' +1 ), макропроцесор замінить цей фрагмент наступним чином ;

(('A' +1) >= 0x20 && ('A' +1) <= 0x7e)

Ще раз відзначимо, що правильність заміни не перевіряється. Тому при складанні своїх макровизначень програміст зобов'язаний виявляти велику акуратність і уважність.

 

 




Переглядів: 434

<== попередня сторінка | наступна сторінка ==>
Особливості типу char | Рекомендації зо вибору імен змінних і функцій

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.01 сек.