Η εντολή typedef (type definition)
Με την εντολή typedef
μπορούμε να ορίσουμε έναν τύπο δεδομένων με ένα άλλο όνομα.
Αυτό γίνεται περισσότερο για πρακτικούς λόγους.
Για παράδειγμα, ο τύπος unsigned char
μπορεί να μετονομαστεί για πιο σύντομα έστω σε BYTE
.
Αυτό γίνεται με την εξής εντολή: typedef unsigned char BYTE;
.
Απ' τη στιγμή που θα γίνει ο ορισμός μπορούμε να χρησιμοποιούμε τον τύπο BYTE
αντί τον τύπο unsigned char
.
Η typedef
χρησιμοποιείται συχνά για τον ορισμό των structs.
Παράδειγμα
#include <stdio.h> #include <string.h> /* δήλωση struct με το όνομα Book */ struct Book { char title[50]; char author[50]; int id; double price; }; int main () { /* ορισμός του struct Book σε BOOK */ typedef struct Book BOOK; /* δήλωση μεταβλητής τύπου BOOK */ BOOK myBook; /* καταχώρηση τιμών στα μέλη του myBook */ strcpy(myBook.title, "C Programming"); strcpy(myBook.author, "Leonidas Τsaras"); myBook.id = 7654321; myBook.price = 19.99; /* ανάγνωση και εκτύπωση τιμών μελών του myBook */ printf("Book's title : %s\n", myBook.title); printf("Book's author : %s\n", myBook.author); printf("Book's id : %d\n", myBook.id); printf("Book's price : %0.2f\n", myBook.price); return 0; }
Book's title : C Programming
Book's author : Leonidas Τsaras
Book's id : 7654321
Book's price : 19.99
Book's author : Leonidas Τsaras
Book's id : 7654321
Book's price : 19.99
Παράδειγμα
Στο παρακάτω παράδειγμα ο νέος τύπος μπορεί να δηλωθεί και globally. Επίσης μπορεί να δηλωθεί ως παράμετρος ή και ως δείκτης.
#include <stdio.h> #include <string.h> /* δήλωση struct με το όνομα Book */ struct Book { char title[50]; char author[50]; int id; double price; }; /* ορισμός του struct Book σε BOOK (globally) */ typedef struct Book BOOK; /* δήλωση συνάρτησης με παράμετρο έναν δείκτη BOOK (αντί struct Book) */ void printBook(BOOK *book) { /* ανάγνωση και εκτύπωση τιμών μελών του book για δείκτες τύπου struct χρησιμοποιούμε τον τελεστή -> */ printf("Book's title : %s\n", book->title); printf("Book's author : %s\n", book->author); printf("Book's id : %d\n", book->id); printf("Book's price : %0.2f\n", book->price); } int main () { BOOK myBook; /* δήλωση μεταβλητής τύπου BOOK (αντί struct Book) */ BOOK *p; /* δήλωση δείκτη τύπου BOOK (αντί struct Book) */ p = &myBook; /* αποθήκευση διεύθυνσης της myBook στον δείκτη */ /* καταχώρηση τιμών στα μέλη του myBook για δείκτες χρησιμοποιούμε τον τελεστή -> αντί της τελείας */ strcpy(p->title, "C Programming"); strcpy(p->author, "Leonidas tsaras"); p->id = 7654321; p->price = 19.99; /* κλήση της printBook με όρισμα τον δείκτη p */ printBook(p); return 0; }
Book's title : C Programming
Book's author : Leonidas Τsaras
Book's id : 7654321
Book's price : 19.99
Book's author : Leonidas Τsaras
Book's id : 7654321
Book's price : 19.99
Παράδειγμα
Σε πολλές περιπτώσεις το typedef ενός struct μπορεί να γίνει πιο σύντομα με τον τρόπο που φαίνεται στο παρακάτω παράδειγμα.
/* ορισμός struct Book με το όνομα BOOK */ typedef struct Book { char title[50]; char author[50]; int id; double price; } BOOK;