C'de (ANSI, C99, vb.), yapılar kendi ad alanlarında yaşar. Bağlantılı bir liste için bir yapı şöyle görünebilir:
struct my_buffer_type {
struct my_buffer_type * next;
struct my_buffer_type * prev;
void * data;
};
Bununla birlikte, çoğu C programcısı için aşağıdaki gibi bu yapıları otomatik olarak yazmak oldukça doğal görünmektedir.
typedef struct tag_buffer_type {
struct tag_buffer_type * next;
struct tag_buffer_type * prev;
void * data;
} my_buffer_type;
Ve sonra yapıya normal bir tip gibi bakın, yani get_next_element(my_buffer_type * ptr)
.
Şimdi sorum şu: Bunun özel bir nedeni var mı?
Wikipedia diyor ki http://en.wikipedia.org/wiki/Typedef#Usage_concerns
Bazı insanlar, typedef'lerin yaygın kullanımına karşı çıkıyorlar. Çoğu argüman, typedef'lerin bir değişkenin gerçek veri türünü gizlemesine odaklanır. Örneğin, bir Linux çekirdek korsanı ve belgeseli Greg Kroah-Hartman, işlev prototip bildirimleri dışında herhangi bir şey için kullanılmalarını engelliyor. Bu uygulamanın sadece gereksiz yere kodu şaşırtmakla kalmayıp, aynı zamanda programcıların büyük yapıları yanlışlıkla basit tipler olduğunu düşünerek kötüye kullanmasına neden olabileceğini savunuyor. [4]
Diğerleri, typedefs kullanımının kodun bakımını kolaylaştırabileceğini savunuyor. K&R, typedef kullanmanın iki nedeni olduğunu belirtir. İlk olarak, bir programı daha taşınabilir hale getirmek için bir yol sağlar. Programın kaynak dosyaları boyunca göründüğü her yerde bir türü değiştirmek yerine, yalnızca tek bir typedef deyiminin değiştirilmesi gerekir. İkinci olarak, bir typedef karmaşık bir bildirimin anlaşılmasını kolaylaştırabilir.
Şahsen struct
, bazen typedef'd yapıları kullanmamak için ayrı bir ad alanına sahip olmanın yeterli faydası olup olmadığını merak ediyorum. farkında olmadığım gelenekler.
O zaman tarihsel düşüncelerle ilgileniyorum (selefler, C'nin ilk versiyonları).
typedef
olan bir değişkenin asıl türünü gizlemek için. Altime_t
örnek olarak: insanlar etrafında yatan tamsayı türünü kullanarak giderseniz, böyle uygulanmasında bir değişiklik kod çok şey kıracak 2038 yılında gerekecektir biriydi. People İnsanlar yapıları nedenini anlamadan kullanıyorlarsa, bu yapıda değil programcıda başarısızlıktır.