di C (ANSI, C99, dll.), struct tinggal di namespace mereka sendiri. Sebuah struct untuk daftar tertaut mungkin terlihat seperti ini:
struct my_buffer_type {
struct my_buffer_type * next;
struct my_buffer_type * prev;
void * data;
};
Tampaknya cukup alami namun bagi kebanyakan programmer C untuk secara otomatis mengetikkan struct tersebut seperti berikut
typedef struct tag_buffer_type {
struct tag_buffer_type * next;
struct tag_buffer_type * prev;
void * data;
} my_buffer_type;
Dan kemudian referensi struct seperti tipe normal, yaitu get_next_element(my_buffer_type * ptr)
.
Sekarang pertanyaan saya adalah: Apakah ada alasan khusus untuk ini?
Wikipedia mengatakan http://en.wikipedia.org/wiki/Typedef#Usage_concerns
Beberapa orang menentang penggunaan typedef yang ekstensif. Sebagian besar argumen berpusat pada gagasan bahwa typedef hanya menyembunyikan tipe data aktual dari suatu variabel. Sebagai contoh, Greg Kroah-Hartman, seorang hacker dan dokumenter kernel Linux, mengecilkan penggunaannya untuk apa pun kecuali deklarasi prototipe fungsi. Dia berpendapat bahwa praktik ini tidak hanya mengaburkan kode yang tidak perlu, tetapi juga dapat menyebabkan programmer secara tidak sengaja menyalahgunakan struktur besar berpikir mereka adalah tipe sederhana. [4]
Lainnya berpendapat bahwa penggunaan typedef dapat membuat kode lebih mudah dipelihara. K&R menyatakan bahwa ada dua alasan untuk menggunakan typedef. Pertama, ini menyediakan sarana untuk membuat program lebih portabel. Alih-alih harus mengubah jenis di mana pun itu muncul di seluruh file sumber program, hanya pernyataan typedef tunggal yang perlu diubah. Kedua, typedef dapat membuat deklarasi kompleks lebih mudah dipahami.
Saya pribadi bertanya-tanya apakah tidak ada cukup manfaat memiliki struct
namespace terpisah untuk kadang-kadang tidak menggunakan struct typedef'd dan karena ada beberapa budaya pemrograman C sekitar (pemrograman Windows C memiliki tradisi yang berbeda dari pemrograman Linux C dalam pengalaman saya) jika ada tradisi yang tidak saya sadari.
Kemudian saya tertarik pada pertimbangan historis (pendahulu, versi pertama C).
typedef
adalah untuk menyembunyikan tipe variabel yang sebenarnya. Ambiltime_t
sebagai contoh: jika orang berkeliling menggunakan tipe integer yang mendasarinya, perubahan dalam implementasi seperti itulah yang akan diperlukan pada tahun 2038 akan memecahkan banyak sekali kode. FJika orang menggunakan struktur tanpa memahami alasannya, itu adalah kegagalan pada programmer, bukan konstruknya.