🟡 Intermediate  ·  Lesson 32

typedef

typedef क्या है?

C में कुछ type नाम लंबे और दोहराव वाले होते हैं — unsigned long int, struct Employee, या कोई उलझा function-pointer type। typedef आपको किसी भी मौजूदा type को एक छोटा, पढ़ने योग्य alias देने देता है, ताकि आप हर जगह छोटा नाम इस्तेमाल कर सकें।

ज़रूरी बात: typedef नया type नहीं बनाता। यह सिर्फ़ पहले से मौजूद type का उपनाम बनाता है। Variable बिल्कुल वैसा ही व्यवहार करता है — बस लिखने और पढ़ने में आसान हो जाता है।

एक बुनियादी alias

C Language
#include <stdio.h>
typedef unsigned int uint;   // uint अब unsigned int है

int main() {
    uint age = 25;
    printf("Age = %u\n", age);
    return 0;
}
Output:
Age = 25

यहाँ uint बस unsigned int का दोस्ताना नाम है। दोनों compiler के लिए एक ही चीज़ हैं।

struct के साथ typedef

यह सबसे आम उपयोग है। आम तौर पर आप हर बार struct keyword दोहराते हैं; typedef इसे हटा देता है।

C Language
#include <stdio.h>
typedef struct {
    char name[20];
    int  age;
} Person;                 // Person alias है

int main() {
    Person p = {"Aman", 22};
    printf("%s is %d\n", p.name, p.age);
    return 0;
}
Output:
Aman is 22

typedef की बदौलत आप struct Person p; के बजाय Person p; लिखते हैं — साफ़ और अन्य languages के type नामकरण के करीब। (Structures नए हैं? देखें structure बनाम union।)

Pointers और function pointers के लिए typedef

typedef तब सच में चमकता है जब type पढ़ने में कठिन हो। Function pointers इसका classic उदाहरण हैं।

C Language
#include <stdio.h>
typedef int (*Operation)(int, int);   // उलझे type का alias

int add(int a, int b) { return a + b; }

int main() {
    Operation op = add;        // साफ़ और पढ़ने योग्य
    printf("Sum = %d\n", op(5, 6));
    return 0;
}
Output:
Sum = 11

typedef के बिना आपको हर बार पूरा int (*op)(int, int) लिखना पड़ता। (कच्ची syntax के लिए देखें function pointers।)

typedef बनाम #define

दोनों नाम दे सकते हैं, पर एक जैसे नहीं हैं। #define अंधा text replacement है; typedef types समझता है।

बिंदुtypedef#define
किसके द्वाराCompilerPreprocessor
Types समझता हैहाँनहीं (सादा text)
Pointers के साथ सुरक्षितहाँअक्सर buggy
Scope नियमसामान्य scope मानता हैनीचे हर जगह text
⚠️ एक सूक्ष्म जाल

#define PTR int* फिर PTR a, b; सिर्फ़ a को pointer बनाता है। typedef int* PTR; के साथ a और b दोनों pointers हैं। इसीलिए types के लिए typedef सुरक्षित है।

आम गलतियाँ

  • यह सोचना कि typedef नया type बनाता है — यह सिर्फ़ alias बनाता है।
  • Pointer types के लिए #define इस्तेमाल करके अप्रत्याशित declarations पाना।
  • Alias नाम गलत जगह रखना (यह typedef के अंत में आता है)।
  • सरल types के लिए typedef का ज़्यादा इस्तेमाल, जो छिपा सकता है कि variable असल में क्या है।
🏋️ अभ्यास

Book नाम का एक typedef struct title और price के साथ define करें, दो books बनाएँ और print करें। फिर एक declaration लंबे तरीके से (struct ...) दोबारा लिखें ताकि साबित हो कि दोनों रूप समान हैं।

सारांश

  • typedef किसी मौजूदा type को छोटा, पढ़ने योग्य alias देता है — कोई नया type नहीं बनता।
  • Structs के साथ यह बार-बार का struct keyword हटाता है (Person p;)।
  • यह pointer और function-pointer types को पढ़ने में बहुत आसान बनाता है।
  • Types नाम देने के लिए #define पर typedef पसंद करें — यह type-aware और सुरक्षित है।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में typedef क्या है?
typedef किसी मौजूदा type के लिए एक नया, छोटा नाम (alias) बनाता है। यह नया type नहीं बनाता — बस मौजूदा को ज़्यादा पढ़ने योग्य label देता है। जैसे typedef unsigned long ulong; से आप unsigned long की जगह ulong लिख सकते हैं।
typedef और #define में क्या अंतर है?
typedef compiler द्वारा संभाला जाता है और असली types समझता है, इसलिए यह pointers और जटिल declarations के साथ भी सही चलता है। #define preprocessor का सादा text replacement है जिसमें type की समझ नहीं होती, जो अप्रत्याशित व्यवहार कर सकता है। Types नाम देने के लिए typedef ज़्यादा सुरक्षित है।
C में struct के साथ typedef क्यों इस्तेमाल होता है?
typedef के बिना हर बार struct Point p; लिखना पड़ता है। typedef struct { ... } Point; के साथ आप सिर्फ़ Point p; लिख सकते हैं। यह बार-बार का struct keyword हटाता है और code को साफ़ तथा पढ़ने में आसान बनाता है।
क्या typedef नया data type बनाता है?
नहीं। typedef सिर्फ़ मौजूदा type का alias बनाता है — भीतरी type अपरिवर्तित रहता है। Alias से declared variable बिल्कुल वही type होता है जो लंबे तरीके से declared, इसलिए वे पूरी तरह अदल-बदल किए जा सकते हैं।
क्या typedef function pointers को पढ़ने में आसान बना सकता है?
हाँ, यह इसके सबसे अच्छे उपयोगों में से एक है। Function pointer syntax पढ़ने में कठिन है, इसलिए typedef int (*Operation)(int, int); जैसा typedef आपको फिर variables को बस Operation op; के रूप में declare करने देता है, हर बार पूरी उलझी syntax दोहराए बिना।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.