Дефиниране на имена на типове

Една удобна езикова конструкция в C е дефинирането на нови имена на типове на променливи.
Синтаксис:

  1. typedef стар_тип нов_тип;
Тук стар_тип е име на допустим за езика тип на променлива. Освен това може стар_тип да е име на тип, който е вече дефиниран в програмата с typedef. нов_тип е ново име, заместващо името, описано в стар_тип. нов_тип е произволен, допустим за езика идентификатор, различен от имената на променливите в съответната област на действие.
Примери:
  1. typedef int PRIM;
  2. PRIM i, j; //дефиниране на променливи i, j от тип PRIM ⇔ тип int
  3. typedef float real;
  4. real x, y;
за 4 – байтов тип Integer
  1. typedef int Integer; //32-битов компилатор
  2. typedef long int Integer; //16-битов компилатор

Важно: С typedef не се дефинира нов тип, а се дава ново име на вече съществуващ тип.

Чрез използването на typedef, програмата става лесно преносима за различни платформи. Описанието typedef може да се използва със сложни типове данни като масиви, структури, указатели към масиви и структури, обединения.
Примери:
  1. typedef float Exp[100];
  2. Exp a, b; ⇔ float a[100], b[100];
  3.  
  4. typedef char *word;
  5. word p, q; ⇔ char *p, *q;

Можем да дефинираме ново име на прототип на функция.
Например:

  1. typedef char *fun(int);
  2. fun arc; //дефиниране на функция arc, която връща указател към     
  3.          //      char и има един параметър от тип int

Също така, можем да задаваме ново име на тип структура.
  1. struct address
  2.  { char town[20];
  3.   char street[20];
  4.   int num;
  5.  }
  6. typedef struct
  7.  { char name[30];
  8.    struct address adr;
  9.    char egn[11];
  10.  } officer;
  11.  
  12. officer a; //дефиниране на структурна променлива от тип officer
  13.        //      по този начин избягваме ключовата дума struct

Предимства при използването на typedef:
-    увеличава се пригледността на програмата
-    при дефиниране на променливите се постига по-компактно записване
-    постига се по-добра преносимост на програмата