Any way in C to forward declare struct in header without having to use pointer in other files? -
मान लीजिए मुझे यह सूची में है h:
typedef struct list_t list_t; टाइपेडफ स्ट्रेट list_iter_t list_iter_t; List_iter_t इटरेटर (list_t * सूची); और फिर उन्हें list.c में निर्दिष्ट करें:
typedef struct node_t {...} node_t; Struct list_iter_t {node_t * चालू; // इसमें जानकारी है कि क्या इटरेटर अंत तक पहुंच चुका है, आदि। चार खतरा; }; Struct list_t {...} list_iter_t iterator (list_t * सूची) {list_iter_t iter; ... वापसी करें; } हैडर फाइल में संरचना घोषणा शामिल करने से कुछ भी अलग हो सकता है ताकि कुछ फाइल में test.c मेरे पास हो:
#include "list.h" void foo (list_t * सूची) {list_iter_t = iterator (सूची); ...} जैसा कि संभवतः कम्पाइलर को किसी भी तरह list_iter_t का भंडारण आकार बता सकता है? एक संकेतक का उपयोग करना असुविधाजनक है (क्योंकि यह एक संकेतक नहीं है, बल्कि अन्य कारणों से), लेकिन साथ ही मैं कार्यान्वयन के विवरण को यथासंभव अधिक छुपाना चाहता हूं।
संक्षिप्त जवाब "नहीं" है।
जिस तरह से आप संकलक को struct यह बताता है कि कैसे struct संरचित है। यदि आप किसी ऑब्जेक्ट को ऑब्जेक्ट के बजाय ऑब्जेक्ट आवंटित करना चाहते हैं, तो संकलक ऑब्जेक्ट के पूर्ण प्रकार को जानना चाहिए। यदि संरचना अपूर्ण है तो आप संरचना के सूचक द्वारा किसी संरचना के सदस्यों तक पहुंच नहीं सकते हैं। यही है, संकलक को someptr- & gt; सदस्य (साथ ही साथ somevalue या एक्सेस का उपयोग करने के लिए उपयोग करने के लिए सही कोड उत्पन्न करने के लिए ऑफसेट और प्रकार का पता होना चाहिए < कोड> somevalue.member )।
Comments
Post a Comment