ATRIBUIRI DE NUME PENTRU TIPURI DE DATE
După cum ştim tipurile de bază ale limbajului C, numite şi tipuri predefinite se identifică printr-un cuvânt cheie (int, char, float, etc). Totodată prin instrucţiunea struct, programatorul poate să introducă un tip nou. Programatorul poate să atribuie un nume unui tip (predefinit sau utilizator) cu ajutorul construcţiei:
typedef tip nume_nou_tip;
unde:
tip este numele unui tip predefinit sau al unui tip utilizator (introdus cu struct);
nume_nou_tip este noul nume atribuit tipului respectiv.
După ce s-a atribuit un nou nume unui tip, numele respectiv poate fi utilizat pentru a declara date de acel tip, la fel cum se utilizează în declaraţii cuvintele cheie int, char, float, etc.
Observaţii:
1o. De obicei numele atribuit unui tip se scrie cu litere mari.
2o. Un exemplu de astfel de nume există în fişierul stdio.h pentru tipul fişier, căruia i s-a atribuit numele FILE.
Exemple:
Fie declaraţiile:
typedef int INTREG;
typedef float REAL;
În continuare, denumirile INTREG şi REAL se pot folosi la fel ca şi cuvintele cheie int şi float. Cu alte cuvinte, declaraţia:
INTREG i, j, tablou[10];
este identică cu declaraţia următoare:
int i, j, tablou[10];
Analog:
REAL x, y, z;
este identică cu declaraţia:
float x, y, z;
typedef struct data_calendaristica
{ int ziua;
char luna[11];
int anul;
} DC;
Prin această declaraţie se atribuie denumirea DC tipului structurat data_calendaristica. În continuare putem declara date de tip DC:
DC data_nasterii, data_angajarii;
DC data_curenta ={31,”august”,1998};
typedef int *PI;
Prin această declaraţie se introduce un sinonim pentru tipul pointer spre întregi: int *.
Putem să declarăm în continuare pointeri spre întregi astfel:
PI p;
care este echivalentă cu:
int *p;
Declaraţia typdef struct
{ double real;
double imaginar;
} COMPLEX;
introduce numele COMPLEX pentru datele de tip complex.
Funcţia următoare returnează modulul unui număr complex:
typedef struct
{ double real;
double imaginar;
} COMPLEX;
#include <math.h>
double modul (COMPLEX *x) // returneaza modulul numarului
// spre care pointeaza x
{ return sqrt (x->real * x->real + x->imaginar * x->imaginar);
}