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-specifiers
init-declarator-list
Memilih ;
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
Memilih
type-specifier
declaration-specifiers
Memilih
type-qualifier
declaration-specifiers
Memilih
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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk