Tolong jangan gunakan hal-hal seperti "vps_t".
Merupakan kesalahan untuk menggunakan typedef untuk struktur dan pointer. Ketika Anda melihat a
vps_t a;
di sumbernya, apa artinya?
Sebaliknya, jika dikatakan
struct virtual_container *a;
Anda benar-benar dapat mengetahui apa itu "a".
Banyak orang berpikir bahwa mengetik "membantu keterbacaan". Tidak begitu. Mereka hanya berguna untuk:
(A) objek benar-benar buram (di mana typedef secara aktif digunakan untuk menyembunyikan apa objek itu).
Contoh: "pte_t" dll. Objek buram yang hanya dapat Anda akses menggunakan fungsi accessor yang tepat.
CATATAN! Ketidakjelasan dan "fungsi pengakses" tidak baik dalam diri mereka. Alasan kami memilikinya untuk hal-hal seperti pte_t dll. Adalah benar-benar nol informasi yang dapat diakses di sana.
(B) Hapus jenis integer, di mana abstraksi membantu menghindari kebingungan apakah itu "int" atau "panjang".
u8 / u16 / u32 adalah typedef yang sangat bagus, meskipun mereka masuk dalam kategori (d) lebih baik daripada di sini.
CATATAN! Sekali lagi - perlu ada alasan untuk ini. Jika ada sesuatu yang "tidak ditandai lama", maka tidak ada alasan untuk melakukannya
typedef unsigned long myflags_t;
tetapi jika ada alasan yang jelas mengapa itu dalam keadaan tertentu mungkin merupakan "unsigned int" dan di bawah konfigurasi lain mungkin "unsigned long", maka tentu saja silakan dan gunakan typedef.
(C) ketika Anda menggunakan jarang untuk benar-benar membuat tipe baru untuk pemeriksaan tipe.
(d) Tipe baru yang identik dengan tipe C99 standar, dalam keadaan tertentu tertentu.
Meskipun hanya membutuhkan waktu singkat bagi mata dan otak untuk menjadi terbiasa dengan tipe standar seperti 'uint32_t', toh sebagian orang tetap menolak penggunaannya.
Oleh karena itu, tipe 'u8 / u16 / u32 / u64' khusus Linux dan setara yang ditandatangani yang identik dengan tipe standar diizinkan - meskipun mereka tidak wajib dalam kode baru Anda sendiri.
Saat mengedit kode yang ada yang sudah menggunakan satu atau beberapa tipe lainnya, Anda harus menyesuaikan dengan pilihan yang ada dalam kode itu.
(e) Jenis aman untuk digunakan di ruang pengguna.
Dalam struktur tertentu yang terlihat oleh userspace, kami tidak dapat membutuhkan tipe C99 dan tidak dapat menggunakan formulir 'u32' di atas. Dengan demikian, kami menggunakan __u32 dan tipe serupa di semua struktur yang dibagi dengan userspace.
Mungkin ada kasus-kasus lain juga, tetapi aturan dasarnya harus TIDAK PERNAH menggunakan typedef kecuali Anda dapat dengan jelas mencocokkan salah satu aturan itu.
Secara umum, sebuah pointer, atau struct yang memiliki elemen yang dapat diakses secara langsung tidak boleh berupa typedef.