русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Typedef


Дата додавання: 2014-11-28; переглядів: 898.


C передбачає засіб, що має назву typedef, який дозволяє створювати нові назви типів даних. Так, наприклад, оголошення

typedef int Length;

зробить назву Length синонімом int. Тепер тип Lengh можна вживати в оголошеннях, зведеннях тощо, так само як ми це робимо з int:

Length len, maxlen;

Length *lengths[];

Подібно до цього, оголошення

typedef char *String;

перетворить String у синонім char * (символьний покажчик), що пізніше можна використати в оголошеннях і зведеннях типів:

String p, lineptr[MAXLINES], alloc(int);

int strcmp(String, String);

p = (String) malloc(100);

Зверніть увагу, що новий тип, який було оголошено в typedef, з'являється на місці назви змінної, а не одразу після слова typedef. Синтаксично, typedef подібний до зберігальних класів extern, static тощо. Ми використали заголовні перші літери нових типів, щоб вони вирізнялися.

Як складніший приклад, ми могли би застосувати typedef для деревовидних вузлів з попереднього розділу:

typedef struct tnode *Treeptr;

 

typedef struct tnode { /* the tree node: */

 

char *word; /* points to the text */

int count; /* number of occurrences */

struct tnode *left; /* left child */

struct tnode *right; /* right child */

} Treenode;

Це утворить дві нові назви типів із назвою Treenode (структура) і Treeptr (покажчик на структуру). Після цього, функція talloc виглядатиме як

Treeptr talloc(void)

{

return (Treeptr) malloc(sizeof(Treenode));

}

Слід однак підкреслити, що оголошення typedef не створює, власно кажучи, цілком нового типу — воно просто додає нову назву для того, який вже існує. Також, семантика не зазнає жодних змін — змінні, оголошені в такий спосіб, матимуть ті самі властивості, що й змінні, чий тип вказано безпосередньо. Фактично, typedef аналогічний #define за винятком того, що, через те, що його інтерпретовано компілятором, він може впоратися з текстовими замінами, які значно перевищують можливості препроцесора. Наприклад,

typedef int (*PFI)(char *, char *);

утворює тип PFI, який є покажчиком на функцію (з двома аргументами char *), і повертає ціле. Це можна використати в такому контексті, як

PFI strcmp, numcmp;

скажімо, програми sort з Розділу 5.

Попри чисто естетичні міркування, існують дві вагоміші причини використання typedef. Перша, це параметризувати програму від проблем з портабельністю. При використанні typedef з типами даних, які можуть виявитись машинозалежними, потрібно тільки поміняти typedef, коли програму перенесено на іншу машину. Поширеним випадком є використання typedef-назв для різноманітних цілих величин, після чого встановлення відповідних значень для short, int таlong для кожної окремої машини. Типи на зразок size_t та ptrdiff_t зі стандартної бібліотеки являються хорошим прикладом.

Другою ціллю typedef є надання кращої документації програмі - тип із назвою Treeptr легше зрозуміти ніж такий, що оголошено просто як покажчик на складну структуру.


<== попередня лекція | наступна лекція ==>
Пошук по таблиці | Сполуки


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн