Bagikan melalui


Deklarasi Typedef

Deklarasi typedef adalah deklarasi dengan typedef sebagai kelas penyimpanan. Deklarator menjadi tipe baru. Anda dapat menggunakan deklarasi typedef untuk membuat nama yang lebih pendek atau lebih bermakna untuk jenis yang sudah ditentukan oleh C atau untuk jenis yang telah Anda deklarasikan. Nama typedef memungkinkan Anda untuk merangkum detail implementasi yang dapat berubah.

Deklarasi typedef diinterpretasikan dengan cara yang sama seperti variabel atau deklarasi fungsi. Namun, alih-alih mengasumsikan tipe yang ditentukan oleh deklarasi, pengidentifikasi menjadi sinonim untuk jenis tersebut.

Sintaks

declaration:
declaration-specifiersinit-declarator-listMemilih ;

declaration-specifiers:
storage-class-specifierdeclaration-specifiersMemilih
type-specifierdeclaration-specifiersMemilih
type-qualifierdeclaration-specifiersMemilih

storage-class-specifier:
typedef

type-specifier:
void
char
short
int
long
float
double
signed
unsigned
struct-or-union-specifier
enum-specifier
typedef-name

typedef-name:
identifier

Deklarasi typedef tidak membuat jenis baru. Deklarasi typedef menciptakan sinonim untuk tipe yang ada atau nama untuk tipe yang dapat ditentukan dengan cara lain. Ketika nama typedef digunakan sebagai penentu tipe, nama tersebut dapat dikombinasikan dengan penentu tipe tertentu, tetapi tidak dengan tipe yang lain. Pengubah yang dapat diterima mencakup const dan volatile.

Nama typedef berbagi ruang nama dengan pengidentifikasi biasa. (Untuk informasi selengkapnya, lihat Spasi Nama.) Oleh karena itu, program dapat memiliki nama typedef dan pengidentifikasi cakupan lokal dengan nama yang sama. Contohnya:

typedef char FlagType;

int main()
{
}

int myproc( int )
{
    int FlagType;
}

Saat Anda mendeklarasikan pengidentifikasi cakupan lokal dengan nama yang sama dengan typedef, atau saat Anda mendeklarasikan anggota struktur atau gabungan dalam cakupan yang sama atau dalam cakupan dalam, Anda juga harus menentukan penentu jenis. Contoh berikut menggambarkan batasan ini:

typedef char FlagType;
const FlagType x;

Untuk menggunakan kembali nama FlagType sebagai pengidentifikasi, anggota struktur, atau anggota gabungan, tipenya harus disediakan:

const int FlagType;  /* Type specifier required */

Tidak cukup untuk mengatakan

const FlagType;      /* Incomplete specification */

Karena FlagType dianggap sebagai bagian dari tipe, bukan pengidentifikasi yang sedang dideklarasikan ulang. Deklarasi ini dianggap sebagai deklarasi tidak sah, seperti

int;  /* Illegal declaration */

Anda dapat mendeklarasikan jenis apa pun dengan typedef, termasuk jenis pointer, fungsi, dan array. Anda dapat mendeklarasikan nama typedef untuk sebuah penunjuk ke tipe struktur atau gabungan sebelum Anda mendefinisikan tipe struktur atau gabungan, selama definisi tersebut memiliki visibilitas yang sama dengan deklarasi.

Nama typedef dapat digunakan untuk meningkatkan keterbacaan kode. Ketiga deklarasi signal berikut menentukan tipe yang sama persis, merupakan yang pertama tanpa menggunakan nama typedef apa pun.

typedef void fv( int ), (*pfv)( int );  /* typedef declarations */

void ( *signal( int, void (*) (int)) ) ( int );
fv *signal( int, fv * );   /* Uses typedef type */
pfv signal( int, pfv );    /* Uses typedef type */

Contoh

Contoh-contoh berikut menggambarkan deklarasi typedef:

typedef int WHOLE; /* Declares WHOLE to be a synonym for int */

Misalnya, WHOLE sekarang dapat digunakan dalam deklarasi variabel seperti WHOLE i; atau const WHOLE i;. Namun, deklarasi long WHOLE i; akan menjadi tidak sah.

typedef struct club
{
    char name[30];
    int size, year;
} GROUP;

Pernyataan ini mendeklarasikan GROUP sebagai tipe struktur dengan tiga anggota. Karena tag struktur, club, juga ditentukan, baik nama typedef (GROUP) atau tag struktur dapat digunakan dalam deklarasi. Anda harus menggunakan struct kata kunci dengan tag, dan Anda tidak dapat menggunakan struct kata kunci dengan nama typedef.

typedef GROUP *PG; /* Uses the previous typedef name
                      to declare a pointer            */

Tipe PG dideklarasikan sebagai penunjuk ke tipe GROUP, yang selanjutnya didefinisikan sebagai tipe struktur.

typedef void DRAWF( int, int );

Contoh ini menyediakan tipe DRAWF untuk fungsi yang tidak mengembalikan nilai dan mengambil dua argumen int. Ini berarti, misalnya, bahwa deklarasi

DRAWF box;

setara dengan deklarasi

void box( int, int );

Lihat juga

Deklarasi dan Jenis