Η εντολή 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;
	}

Παράδειγμα

Στο παρακάτω παράδειγμα ο νέος τύπος μπορεί να δηλωθεί και 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;
	}

Παράδειγμα

Σε πολλές περιπτώσεις το typedef ενός struct μπορεί να γίνει πιο σύντομα με τον τρόπο που φαίνεται στο παρακάτω παράδειγμα.

/* ορισμός struct Book με το όνομα BOOK */
	typedef struct Book {
		char title[50];
		char author[50];
		int id;
		double price;
	} BOOK;