typedef
adalah konstruksi bahasa yang mengaitkan nama ke suatu jenis.
Anda menggunakannya dengan cara yang sama Anda akan menggunakan jenis aslinya, misalnya
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
suka menggunakannya
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Seperti yang Anda lihat, Anda bisa saja mengganti nama typedefed dengan definisi yang diberikan di atas.
Kesulitan terletak pada pointer ke fungsi sintaksis dan keterbacaan dalam C dan C ++, dan typedef
dapat meningkatkan pembacaan deklarasi tersebut. Namun, sintaksinya sesuai, karena fungsi - tidak seperti tipe yang lebih sederhana - mungkin memiliki nilai dan parameter pengembalian, sehingga deklarasi pointer ke fungsi terkadang panjang dan kompleks.
Keterbacaan dapat mulai sangat rumit dengan pointer ke array fungsi, dan beberapa rasa lain yang bahkan lebih tidak langsung.
Untuk menjawab tiga pertanyaan Anda
Mengapa typedef digunakan?
Untuk memudahkan pembacaan kode - terutama untuk pointer ke fungsi, atau struktur nama.
Sintaksnya terlihat aneh (dalam pointer ke pernyataan fungsi)
Sintaks itu tidak jelas untuk dibaca, setidaknya ketika mulai. typedef
Sebaliknya, menggunakan deklarasi memudahkan pembacaan
Apakah pointer fungsi dibuat untuk menyimpan alamat memori suatu fungsi?
Ya, pointer fungsi menyimpan alamat suatu fungsi. Ini tidak ada hubungannya dengan typedef
konstruk yang hanya memudahkan penulisan / pembacaan suatu program; kompiler hanya perlu memperluas definisi typedef sebelum mengkompilasi kode aktual.
Contoh:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456