2010-04-02 15 views

उत्तर

24
विकिपीडिया से

:

typedef C और C++ प्रोग्रामिंग भाषाओं में एक कीवर्ड है। टाइपपीफ का उद्देश्य वैकल्पिक नामों को मौजूदा प्रकारों को असाइन करना है, अक्सर जिनकी मानक घोषणा बोझिल, संभावित रूप से भ्रमित होती है, या एक कार्यान्वयन से दूसरे में भिन्न होने की संभावना होती है।

और:

कश्मीर & आर राज्यों वहाँ एक typedef प्रयोग करने के लिए दो कारण हैं कि। सबसे पहले, यह एक कार्यक्रम को और अधिक पोर्टेबल बनाने के साधन प्रदान करता है। हर जगह एक प्रकार को बदलने के बजाय यह प्रोग्राम की स्रोत फ़ाइलों में दिखाई देता है, केवल एक ही टाइपिफ स्टेटमेंट को बदलने की जरूरत है। दूसरा, एक टाइपिफ एक जटिल घोषणा को समझने में आसान बना सकता है।

और के खिलाफ एक तर्क:

वह (ग्रेग के.एच.) का तर्क है कि इस अभ्यास न केवल अनावश्यक रूप से कोड obfuscates, यह भी प्रोग्रामर गलती से बड़ी सोच उन्हें सरल प्रकार होने के लिए संरचनाओं का दुरुपयोग करने का कारण बन सकता है।

35

typedef एक प्रकार के रूप में कुछ परिभाषित करने के लिए है। उदाहरण के लिए:

typedef struct { 
    int a; 
    int b; 
} THINGY; 

... दिए गए संरचना के रूप में THINGY परिभाषित करता है। इस तरह, आप इसे इस तरह उपयोग कर सकते हैं:

THINGY t; 

... बजाय:

struct _THINGY_STRUCT { 
    int a; 
    int b; 
}; 

struct _THINGY_STRUCT t; 

... जो थोड़ा अधिक वर्बोज़ है। typedefs कुछ चीजें नाटकीय रूप से स्पष्ट कर सकते हैं, खासकर कार्यों के लिए पॉइंटर्स।

+1

क्या वहां कभी भी 'typedef'' struct' नहीं होने का कोई कारण है? – Panzercrisis

+1

@ पेंजरक्रिसिस: मुझे एक के बारे में पता नहीं है, निश्चित रूप से मैं इसे नियमित रूप से कर रहा था ~ 1989-1998 (जिन वर्षों में मैंने अपने सी काम का अधिकांश हिस्सा किया), लेकिन मैं सी विशेषज्ञ नहीं हूं (अब)। –

3

यह अन्य प्रकार का उपनाम कर सकता है।

typedef unsigned int uint; /* uint is now an alias for "unsigned int" */ 
12

typedef मौजूदा प्रकार को उपनाम बनाने के लिए प्रयोग किया जाता है। यह misnomer का थोड़ा सा है: टाइपपीफ नए प्रकार को परिभाषित नहीं करता है क्योंकि नए प्रकार अंतर्निहित प्रकार के साथ अदला-बदले होते हैं। टाइपिफ़ीफ़ अक्सर इंटरफ़ेस परिभाषाओं में स्पष्टता और पोर्टेबिलिटी के लिए उपयोग किए जाते हैं जब अंतर्निहित प्रकार परिवर्तन के अधीन होता है या महत्व का नहीं होता है।

उदाहरण के लिए:

// Possibly useful in POSIX: 
typedef int filedescriptor_t; 

// Define a struct foo and then give it a typedef... 
struct foo { int i; }; 
typedef struct foo foo_t; 

// ...or just define everything in one go. 
typedef struct bar { int i; } bar_t; 

// Typedef is very, very useful with function pointers: 
typedef int (*CompareFunction)(char const *, char const *); 
CompareFunction c = strcmp; 

typedef भी अज्ञात प्रकार के नाम देने के लिए इस्तेमाल किया जा सकता। ऐसे मामलों में, टाइप किए गए प्रकार का टाइप किया गया प्रकार:

typedef struct { int i; } data_t; 
typedef enum { YES, NO, FILE_NOT_FOUND } return_code_t; 

नामकरण सम्मेलन भिन्न हैं। आमतौर पर trailing_underscore_and_t या CamelCase का उपयोग करने की अनुशंसा की जाती है।

3

टाइपपीफ एक नया प्रकार पेश नहीं करता है लेकिन यह सिर्फ एक प्रकार के लिए एक नया नाम प्रदान करता है।

  1. प्रकार है कि गठबंधन सरणियों, structs, संकेत या कार्य:

TYPEDEF लिए किया जा सकता।

  • पोर्टेबिलिटी, typedef आपको जिस प्रकार की आवश्यकता है, उसे सुविधाजनक बनाने के लिए। जब ​​आप विभिन्न प्लेटफॉर्म पर कोड पोर्ट करते हैं, तो टाइप टाइप में केवल परिवर्तन करके सही प्रकार का चयन करें।

  • typedef जटिल प्रकार के कलाकार के लिए एक साधारण नाम प्रदान कर सकता है।

  • typedef का नाम अज्ञात प्रकारों के नाम देने के लिए भी किया जा सकता है। ऐसे मामलों में, टाइप किए गए टाइप टाइप प्रकार के लिए एकमात्र नाम होगा।

  • नोट: -चाहिए उपयोग structs के साथ TYPEDEF। किसी भी संरचना की परिभाषा में हमेशा एक टैग का उपयोग करें, भले ही इसकी आवश्यकता न हो।

    +2

    क्या आप स्ट्रिप के साथ टाइपपीफ का उपयोग न करने पर विस्तार कर सकते हैं? –

    3
    विकिपीडिया से

    : "।।। कश्मीर & आर राज्यों वहाँ एक typedef प्रयोग करने के लिए दो कारण हैं कि सबसे पहले ... दूसरा, एक typedef एक जटिल घोषणा समझने में अधिक आसान बना सकते हैं"

    यहाँ typedef का उपयोग कर, जटिल प्रकार सरल बनाने का दूसरा कारण के लिए एक उदाहरण (जटिल प्रकार कश्मीर & आर से "लिया जाता है सी प्रोग्रामिंग भाषा के दूसरे संस्करण पी। 136) है।

    char (*(*x([])()) 
    

    एक्स है सरणी सूचक वाला फ़ंक्शन [] सूचक की चार लौटने कार्य करने के लिए।

    हम ऊपर घोषणा समझा जा सकता typedefs का उपयोग कर बना सकते हैं। कृपया नीचे उदाहरण देखें।

    typedef char (*pfType)(); // pf is the type of pointer to function returning 
              // char 
    typedef pfType pArrType[2]; // pArr is the type of array of pointers to 
              // functions returning char 
    
    char charf() 
    { return('b'); 
    } 
    
    pArrType pArr={charf,charf}; 
    pfType *FinalF()  // f is a function returning pointer to array of 
            // pointer to function returning char 
    { 
    return(pArr); 
    } 
    
    1

    निम्नलिखित उदाहरण में टाइपपीफ के उपयोग की व्याख्या करना। इसके अलावा, कोडपीड को कोड को और अधिक पठनीय बनाने के लिए उपयोग किया जाता है।

    #include <stdio.h> 
    #include <math.h> 
    
    /* 
    To define a new type name with typedef, follow these steps: 
    1. Write the statement as if a variable of the desired type were being declared. 
    2. Where the name of the declared variable would normally appear, substitute the new type name. 
    3. In front of everything, place the keyword typedef. 
    */ 
    
    // typedef a primitive data type 
    typedef double distance; 
    
    // typedef struct 
    typedef struct{ 
        int x; 
        int y; 
    } point; 
    
    //typedef an array 
    typedef point points[100]; 
    
    points ps = {0}; // ps is an array of 100 point 
    
    // typedef a function 
    typedef distance (*distanceFun_p)(point,point) ; // TYPE_DEF distanceFun_p TO BE int (*distanceFun_p)(point,point) 
    
    // prototype a function  
    distance findDistance(point, point); 
    
    int main(int argc, char const *argv[]) 
    { 
        // delcare a function pointer 
        distanceFun_p func_p; 
    
        // initialize the function pointer with a function address 
        func_p = findDistance; 
    
        // initialize two point variables 
        point p1 = {0,0} , p2 = {1,1}; 
    
        // call the function through the pointer 
        distance d = func_p(p1,p2); 
    
        printf("the distance is %f\n", d); 
    
        return 0; 
    } 
    
    distance findDistance(point p1, point p2) 
    { 
    distance xdiff = p1.x - p2.x; 
    distance ydiff = p1.y - p2.y; 
    
    return sqrt((xdiff * xdiff) + (ydiff * ydiff)); 
    } In front of everything, place the keyword typedef. 
        */ 
    
    संबंधित मुद्दे