typedef struct queue_item_t { // 1
vpoint_t void_item;
struct queue_item_t* next; // 2
} queue_item_t; // 3
सबसे पहले, ध्यान दें कि इस पूरे बयान एक typedef
को परिभाषित किया गया है।
3) कह रहा है कि नए प्रकार हम (typedef
के माध्यम से) को परिभाषित करने की प्रक्रिया में हैं के लिए जा रहा queue_item_t
नाम दिया है।
1) संरचना का नाम (जिसे एक नया नाम दिया जा रहा है, जैसा कि हम जाते हैं) का नाम struct queue_item_t
रखा गया है। यह पूरा नाम है, जिसमें सामने struct
शामिल है।
2) क्योंकि नए प्रकार अभी तक (याद रखें, हम अभी भी यह परिभाषित करने की प्रक्रिया में हैं) मौजूद नहीं है, हम से, केवल नाम यह अब तक है, जो struct queue_item_t
है उपयोग करने के लिए 1)।
नोट आप गुमनाम struct
परिभाषाओं, जो आप से 1) नाम हटा दें करने की अनुमति हो सकता है। एक साधारण उदाहरण:
typedef struct {
int x, y, z;
} vector3;
अपने उदाहरण में हालांकि, के बाद से हम संरचना की जरूरत है खुद को संदर्भित करने में सक्षम हो, next
सूचक एक प्रकार है कि पहले से ही परिभाषित किया है होना आवश्यक है।
struct _queue_item; // 4
typedef struct _queue_item queue_item_t; // 5
struct _queue_item { // 6
vpoint_t void_item;
queue_item_t* next; // 7
}
4) घोषित कि struct _queue_item
मौजूद है, लेकिन अभी तक एक प्रदान नहीं करते हैं: हम कि से आगे struct की घोषणा, यह typedefing, तो next
के लिए struct typedef
घ प्रकार का उपयोग को परिभाषित कर सकते हैं इसके लिए परिभाषा।
5) टाइपपीफ queue_item_t
struct _queue_item
जैसा ही होना चाहिए।
6) संरचना अब की परिभाषा दें ...
7) ... का उपयोग कर हमारे typedef
'queue_item_t
d।
यह सब कहा जा रहा है ... मेरी राय में, please don't use typedefs for structs।
struct queue_item {
void *data;
struct queue_item *next;
}
सरल और पूर्ण है। आप उन छह अतिरिक्त पात्रों को टाइप करने के लिए प्रबंधित कर सकते हैं।
Linux Kernel coding style से
:
अध्याय 5: typedefs
कृपया की तरह "vps_t" चीजों का उपयोग नहीं करते। संरचनाओं और पॉइंटर्स के लिए टाइपपीफ का उपयोग करने के लिए यह गलती है। जब आप
vps_t a;
स्रोत में, इसका क्या अर्थ है? इसके विपरीत, यदि यह कहते हैं
struct virtual_container *a;
आप वास्तव में बता सकते हैं क्या "एक" है।
अपवाद हैं, जिन्हें आप पढ़ सकते हैं।
कुछ हाल ही में संबंधित प्रश्नों:
संभावित उत्तर: http://stackoverflow.com/questions/252780/why-should-we-typedef-a-struct-so-often-in-c – Paulo
कभी भी संरचना नाम और समान प्रकार के नाम का उपयोग करने का सुझाव न दें। 'Typedef struct QUEUE_ITEM {...} queue_item_t;' –
दोबारा खोलने के लिए वोट दिया गया है, क्योंकि डुप्लिकेट सवाल एक ही सटीक चीज़ नहीं पूछ रहा था। –