typedef
- це мовна конструкція, яка пов'язує ім’я з типом.
Ви використовуєте його так само, як, наприклад, оригінальний тип
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
використовуючи їх як
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Як бачите, ви могли просто замінити набране ім'я набране слово на його визначення, яке було наведено вище.
Складність полягає у вказівці на синтаксис функцій та читабельність у C та C ++, і typedef
може покращити читабельність таких декларацій. Однак синтаксис є відповідним, оскільки функції - на відміну від інших більш простих типів - можуть мати повернене значення та параметри, таким чином, іноді тривале і складне оголошення вказівника на функціонування.
Читання може почати бути дуже складним з покажчиками на масиви функцій та деякі інші, навіть більш непрямі смаки.
Щоб відповісти на три запитання
Чому використовується typedef?
Щоб полегшити читання коду, особливо для вказівників на функції або назви структур.
Синтаксис виглядає дивним (у вказівці на функцію оголошення).
Цей синтаксис не очевидно для читання, принаймні на початку. Використання typedef
декларації натомість полегшує читання
Чи створений покажчик функції для зберігання адреси пам'яті функції?
Так, покажчик функції зберігає адресу функції. Це не має нічого спільного з typedef
конструкцією, яка лише полегшує написання / читання програми; компілятор просто розширює визначення typedef перед складанням фактичного коду.
Приклад:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456