Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Файл 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)

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





Дата публикования: 2015-09-17; Прочитано: 176 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...