typedef
एक भाषा निर्माण है जो एक नाम को एक प्रकार से जोड़ता है।
आप इसे उसी तरह उपयोग करते हैं जैसे आप मूल प्रकार का उपयोग करेंगे, उदाहरण के लिए
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
उनका उपयोग करना
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
जैसा कि आप देख सकते हैं, आप बस ऊपर दी गई परिभाषा के साथ टाइप किए गए नाम को बदल सकते हैं ।
सी और सी ++ में वाक्य रचना और पठनीयता के लिए सूचक में कठिनाई निहित है, और इस typedef
तरह की घोषणाओं की पठनीयता में सुधार कर सकते हैं। हालाँकि, सिंटैक्स उपयुक्त है, क्योंकि फ़ंक्शंस - अन्य सरल प्रकारों के विपरीत - एक वापसी मूल्य और पैरामीटर हो सकते हैं, इस प्रकार कार्य करने के लिए एक पॉइंटर की कभी-कभी लंबी और जटिल घोषणा।
पठनीयता वास्तव में कार्य सारणी के संकेत के साथ मुश्किल हो सकती है, और कुछ अन्य भी अप्रत्यक्ष जायके।
अपने तीन सवालों के जवाब देने के लिए
टंकण का उपयोग क्यों किया जाता है?
कोड की रीडिंग को आसान बनाने के लिए - विशेष रूप से कार्यों, या संरचना के नाम के संकेत के लिए।
वाक्यविन्यास विषम दिखता है (सूचक में कार्य करने के लिए घोषणा)
उस वाक्यविन्यास को पढ़ने के लिए स्पष्ट नहीं है, कम से कम शुरुआत में। typedef
इसके बजाय एक घोषणा का उपयोग पढ़ने को आसान बनाता है
क्या एक फ़ंक्शन पॉइंटर किसी फ़ंक्शन के मेमोरी एड्रेस को स्टोर करने के लिए बनाया गया है?
हां, एक फ़ंक्शन पॉइंटर एक फ़ंक्शन का पता संग्रहीत करता है। इसका उस typedef
निर्माण से कोई लेना-देना नहीं है जो केवल एक कार्यक्रम के लिखने / पढ़ने में आसानी करता है; संकलक सिर्फ वास्तविक कोड को संकलित करने से पहले टाइपडीफ परिभाषा का विस्तार करता है।
उदाहरण:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456