वहाँ कम से कम 3 कारणों क्यों मैं typedefs का उपयोग कर रहे हैं, सबसे/जो सभी के पहले से ही जवाब में शामिल किया गया है:
- सरलीकरण:
typedef int (*funcptr)(char, unsigned long);
funcptr f; // f is a ptr to a function taking char & unsigned long, returning an int
typedef std::vector<Record> Container;
Container c; // c is a vector of Records
- कैप्सूलीकरण:
typedef unsigned short int MY_COUNTER;
MY_COUNTER c;
अब अगर बाद में, मैं MY_COUNTER
बड़ा बनाना चाहता हूं, तो मैं सिर्फ टाइपपीफ बदलता हूं और सभी काउंटर-संबंधित कोड अपडेट किया जाता है (एक पुन: संकलन के बाद)। ध्यान दें कि अगर मैंने काउंटर के लिए स्पष्ट रूप से हर जगह unsigned short int
का उपयोग किया था, तो मुझे सभी फाइलों के माध्यम से जाना होगा, और काउंटर के लिए केवल unsigned short int
उपयोगों को बदलना होगा; मैं सिर्फ वैश्विक स्तर पर unsigned short int
को सभी कोड में प्रतिस्थापित नहीं कर सकता क्योंकि मैं इसे काउंटर के अलावा अन्य चीजों के लिए उपयोग कर सकता हूं।
- पोर्टेबिलिटी
typedef unsigned short UINT16;
अब जब मैं एक अलग मंच पर जाने के लिए, मैं सिर्फ नक्शा एक ही स्थान पर (हेडर फाइल) में कुछ और (जैसे, unsigned long
) को UINT16
, लेकिन मेरे सारे कोड अभी भी काम करता है (एक पुन: संकलन के बाद)। लगभग "फ़ायरवॉल टाइप करें" की तरह - यह प्लेटफ़ॉर्म परिवर्तनों को पूरे कोड में परिवर्तनों में फैलाने से रोकता है। कोई भी डेवलपर (विशेष रूप से एम्बेडेड डेवलपर्स जो हमेशा कई आर्किटेक्चर & प्लेटफॉर्म पर डब्ल्यू/कोड से निपट रहे हैं) जिन्हें कभी भी एक बड़े सी या सी ++ कोडबेस & से गुजरना पड़ता है int
से short int
की सभी घटनाओं को बदलना या जो भी इससे संबंधित होगा।
ध्यान दें कि किसी भी हाल ही संकलक के लिए,stdint.h
का उपयोग अक्सर उपलब्ध & मंच पोर्टेबिलिटी दृष्टिकोण के लिए एक बेहतर तरीका है। लेकिन मैं कई प्रणालियों पर काम करता हूं जहां संकलक पुराना है &stdint.h
मौजूद नहीं है (या बनाया जाना है)।
typedefs के लिए अन्य अच्छे उपयोग के बहुत सारे हैं, तो आप टेम्पलेट के साथ अधिक काम करने के लिए विशेष रूप से के रूप में है, लेकिन इन 3 स्थितियों सबसे आम उपयोगी और सहज ज्ञान युक्त/स्पष्ट का उपयोग करता है (कम से कम IMO) से कुछ हैं।
[सी ++ टाइपपीफ प्रश्न ... आसान एक ..] (http://stackoverflow.com/questions/1664028/c-typedef-question-easy-one) के संभावित डुप्लिकेट – marcog