यह WinNT.h
रेखा 519 है (संस्करण का निर्माण: 0091)सी/सी ++ प्रीप्रोसेसर की इस पंक्ति का क्या अर्थ है?
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
क्यों हम unused
नामक एक अजीब नाम के साथ एक एकल पूर्णांक सदस्य के साथ कोई struct करने के लिए एक सूचक की जरूरत है?
और हम कभी इस तरह कोड की एक पंक्ति का उपयोग करने की आवश्यकता होगी?
HINSTANCE hInstance = new HINSTANCE__;
कुल मिलाकर एक ही संरचनाओं के साथ विभिन्न डेटा प्रकार घोषणा करते हुए मेरे लिए कोई मतलब नहीं है। इसके पीछे क्या विचार है?
DECLARE_HANDLE(HRGN);
DECLARE_HANDLE(HRSRC);
DECLARE_HANDLE(HSPRITE);
DECLARE_HANDLE(HLSURF);
DECLARE_HANDLE(HSTR);
DECLARE_HANDLE(HTASK);
DECLARE_HANDLE(HWINSTA);
DECLARE_HANDLE(HKL);
तो, इसके पीछे विचार पूर्णांक डेटा प्रकार जो कि वे क्या घोषित कर दिया गया के अलावा अन्य प्रयोजनों के लिए उपयोग नहीं किया जाएगा करने के लिए है? –
हां, जो हैंडल प्रकारों के लिए प्रकार की सुरक्षा प्रदान करता है, इसलिए जब आप किसी फ़ंक्शन में एक हिनस्टेंस पास करने का प्रयास करते हैं तो आपको एक त्रुटि मिलती है, जिसके लिए अंतर्निहित संरचना समान होती है। (यह जवाब सिर्फ "हां" होने वाला था, लेकिन स्पष्ट रूप से पर्याप्त वर्बोज़ नहीं था। अतिरिक्त वर्बोजिटी जोड़ा गया।) – janm
आह मैं देखता हूं क्यों सी अज्ञात structs को पैरामीटर के रूप में पैरामीटर के रूप में अनुमति नहीं देता है; अगर यह समान सेटअप के साथ किसी भी समान संरचना के बराबर अज्ञात structs का इलाज करता है, तो यह सी को इस चाल के काम को करने में त्रुटियों का कारण नहीं बनता है। उस ने कहा, मुझे यकीन है कि यह अधिक लचीला कोड की अनुमति देगा, लेकिन कम से कम एक कारण है। यह भी संकेत मिलता है कि पॉइंटर्स पर वास्तविक कोड निर्भरता वास्तव में int का आकार है, अन्यथा हैंडल टूट जाएगा और बहुत सारे कोड को फिर से लिखना होगा। – Dmitry