Lütfen "vps_t" gibi şeyler kullanmayın.
Yapıları ve işaretçiler için typedef kullanmak bir hatadır . Bir gördüğünüzde
vps_t a;
Kaynakta ne anlama geliyor?
Aksine, diyorsa
struct virtual_container *a;
aslında "a" nın ne olduğunu söyleyebilirsiniz.
Birçok kişi typedef'lerin "okunabilirliğe yardımcı olduğunu" düşünüyor. Öyle değil. Sadece şunlar için yararlıdırlar:
(a) tamamen opak nesneler (burada typedef'in nesnenin ne olduğunu gizlemek için aktif olarak kullanıldığı ).
Örnek: "pte_t" vb. Yalnızca uygun erişimci işlevlerini kullanarak erişebileceğiniz opak nesneler.
NOT! Opaklık ve "erişimci fonksiyonları" kendi başlarına iyi değildir. Onları pte_t gibi şeyler için sahip olmamızın nedeni, orada kesinlikle sıfır portatif olarak erişilebilir bilgi olmasıdır.
(b) "int" ya da "long" olsun , soyutlamanın karışıklığı önlemeye yardımcı olduğu temiz tamsayı türleri .
u8 / u16 / u32, bu kategoriden (d) kategorisine daha iyi uysalar da, mükemmel şekilde ince tip tanımlardır.
NOT! Tekrar - bunun bir nedeni olmalı . Bir şey "imzasız uzun" ise, bunu yapmak için bir neden yok
typedef unsigned long myflags_t;
ancak belirli koşullar altında "imzasız int" ve diğer yapılandırmalar altında "imzasız uzun" olabileceğinin açık bir nedeni varsa, elbette devam edin ve bir typedef kullanın.
(c) tam anlamıyla yazım denetimi için yeni bir tür oluşturmak için seyrek kullandığınızda .
(d) Belirli istisnai durumlarda standart C99 tipleriyle aynı olan yeni tipler.
Gözlerin ve beynin 'uint32_t' gibi standart tiplere alışması kısa bir süre alsa da, bazı insanlar yine de kullanımlarına itiraz ediyorlar.
Bu nedenle, Linux'a özgü 'u8 / u16 / u32 / u64' türlerine ve standart türlerle aynı olan imzalı eşdeğerlerine izin verilir - kendi kodunuzda zorunlu olmamasına rağmen.
Halihazırda bir veya daha fazla tür grubu kullanan mevcut kodu düzenlerken, o koddaki mevcut seçeneklere uymanız gerekir.
(e) Kullanıcı alanında kullanım için güvenli tipler.
Kullanıcı alanı tarafından görülebilen bazı yapılarda, C99 tiplerine gereksinim duymayız ve yukarıdaki 'u32' formunu kullanamayız. Bu nedenle, kullanıcı alanıyla paylaşılan tüm yapılarda __u32 ve benzeri türleri kullanıyoruz.
Belki başka durumlar da vardır, ancak bu kurallardan birini açıkça eşleştiremediğiniz sürece, temelde HİÇBİR ZAMAN asla bir typedef kullanmamak olmalıdır.
Genel olarak, bir imleç veya makul olarak doğrudan erişilebilen öğelere sahip bir yapı hiçbir zaman bir typedef olmamalıdır .