Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में बिना सदस्यों वाली स्ट्रक्चर घोषित करना


क्या संभव है?

हाँ, C में खाली स्ट्रक्चर (बिना सदस्यों वाली) घोषित करना अनुमत है। इसका आकार 0 बाइट्स होता है।

उदाहरण प्रोग्राम

#include <stdio.h>

// खाली स्ट्रक्चर
struct Empty {
    // कोई सदस्य नहीं
};

int main() {
    struct Empty e;  // चर घोषणा
    printf("खाली स्ट्रक्चर का आकार: %zu बाइट्स\n", sizeof(e));
    printf("sizeof(struct Empty) = %zu\n", sizeof(struct Empty));
    return 0;
}

आउटपुट

खाली स्ट्रक्चर का आकार: 0 बाइट्स
sizeof(struct Empty) = 0

व्यवहार और निहितार्थ

पहलूव्यवहार
आकार0 (अधिकांश कंपाइलर में)
पतावैध पता होता है, लेकिन अगला चर उसी पते पर हो सकता है
सरणीstruct Empty arr[10]; - आकार 0, सभी तत्व समान पता
पॉइंटर अंकगणितptr+1 == ptr (आकार 0 होने के कारण)
C++ मेंआकार 1 बाइट होता है (खाली बेस ऑप्टिमाइजेशन के लिए)

उपयोग के मामले

  1. टैग/मार्कर प्रकार: टाइप-सेफ टैगिंग के लिए
  2. ओपेक प्रकार (Opaque Types): हेडर में केवल घोषणा, परिभाषा .c फाइल में
  3. टेम्पलेट/जेनेरिक प्रोग्रामिंग: प्लेसहोल्डर के रूप में
  4. एलाइनमेंट/पैडिंग: संरचना में अलाइनमेंट बाध्य करना
  5. उदाहरण: ओपेक प्रकार

    
    // api.h - पब्लिक हेडर
    struct Handle;  // अपूर्ण प्रकार (incomplete type)
    typedef struct Handle *Handle;
    
    Handle create();
    void destroy(Handle h);
    void doSomething(Handle h);
    
    // api.c - प्राइवेट कार्यान्वयन
    struct Handle {
        int fd;
        char *buffer;
        // वास्तविक डेटा छिपा है
    };
    
    Handle create() {
        Handle h = malloc(sizeof(*h));
        h->fd = open(...);
        return h;
    }
    

    C vs C++ अंतर

    
    // C
    struct Empty {};  // आकार 0
    Empty e1, e2;
    printf("%p %p\n", &e1, &e2);  // समान पता संभव
    
    // C++
    struct Empty {};  // आकार 1
    Empty e1, e2;
    printf("%p %p\n", &e1, &e2);  // हमेशा अलग पते
    

    C++ में प्रत्येक ऑब्जेक्ट का विशिष्ट पता होना आवश्यक है, इसलिए न्यूनतम आकार 1 बाइट होता है।

    सावधानी

    खाली स्ट्रक्चर की सरणी और पॉइंटर अंकगणित अप्रत्याशित व्यवहार दे सकते हैं। व्यावहारिक कोड में कम से कम एक सदस्य (जैसे char dummy;) रखना सुरक्षित है।

  1. C भाषा में कंस्टेंट क्या हैं और उदाहरण सहित C भाषा में कंस्टेंट क्या हैं और उदाहरण सहित

    कंस्टेंट को उस वेरिएबल के रूप में भी जाना जाता है जहां एक बार परिभाषित होने पर, प्रोग्राम निष्पादन के दौरान मान कभी नहीं बदलता। इस प्रकार, हम एक वेरिएबल को कंस्टेंट के रूप में घोषित कर सकते हैं जो निश्चित मानों को संदर्भित करता है। इसे लिटरल्स भी कहा जाता है। कंस्टेंट को परिभाषित करने के लिए const क

  1. C भाषा में लीनियर डेटा स्ट्रक्चर क्यू C भाषा में लीनियर डेटा स्ट्रक्चर क्यू

    डेटा स्ट्रक्चर डेटा का संग्रह है जो संरचित तरीके से व्यवस्थित होता है। इसे दो प्रकारों में विभाजित किया गया है: लीनियर डेटा स्ट्रक्चर - डेटा एक रैखिक फैशन में व्यवस्थित होता है। उदाहरण: एरे, स्ट्रक्चर, स्टैक, क्यू, लिंक्ड लिस्ट। नॉन-लीनियर डेटा स्ट्रक्चर - डेटा पदानुक्रमित तरीके से व्यवस्थित होता

  1. C भाषा में संरचना अवधारणा का उपयोग करके बिट फ़ील्ड की व्याख्या C भाषा में संरचना अवधारणा का उपयोग करके बिट फ़ील्ड की व्याख्या

    बिट फ़ील्ड का उपयोग वेरिएबल के आकार को बिट्स के संदर्भ में निर्दिष्ट करने के लिए किया जाता है। आमतौर पर, इसे एक संरचना के अंदर परिभाषित किया जाता है। बिट फ़ील्ड: 1 बाइट = 8 बिट्स उदाहरण के लिए, नीचे एक उदाहरण समझाया गया है: Struct info{ int x:2; }; यहां, x 2 बिट्स पर कब्जा करता है। बिट फ़ील