2010-02-11 17 views
6

क्या कोई यह बता सकता है कि कैसे @encode किसी दिए गए ऑब्जेक्ट, स्ट्रक्चर, या डेटाटाइप में मौजूद डेटाटाइप तत्वों को निकालने के लिए काम करता है जिसे तत्कालता के लिए क्लास डिस्क्रिप्टर के रूप में उपयोग करने के लिए एक प्रकार की परिभाषा में उपयोग किया जाता है?उद्देश्य-सी में @encode संकलक निर्देश लागू किया गया है?

या शायद नए प्रीप्रोसेसर निर्देशों के कार्यान्वयन के बारे में सीखने के लिए कुछ संसाधनों के लिए एक सूचक?

+0

मैं इसके सिर्फ एक समारोह की तरह मैक्रो है कि किसी तरह से पार्स करके stringifies क्या पारित हो जाता है सोच रहा हूँ:

इस सवाल है, जो मेरा मानना ​​है कि मैं क्या जानने की कोशिश कर रहा हूँ के रूप में और अधिक स्पष्ट है का संदर्भ लें इसे – Anderson

+0

बस जिज्ञासा है, '@ एन्कोड' सी भाषा से संबंधित कैसे है (जिसमें यह कीवर्ड नहीं है)? मैं 'सी' टैग को हटाने का सुझाव देता हूं। –

+1

'एन्कोड' प्रीप्रोसेसर निर्देश नहीं है, यह प्रकार की जानकारी जैसे कि प्रकार के आकार, पर निर्भर करता है, जो प्रीप्रोसेसर के बारे में पता नहीं है। – dreamlax

उत्तर

1

मूल प्रश्न का वाक्यांश अस्पष्ट हो सकता है और मुझे लगता है कि प्रीप्रोसेसर से जुड़े संभावित कार्यान्वयन के बारे में मेरा उल्लेख वार्तालाप को इच्छित प्रश्न के बजाए कैसे काम करता है, इस बारे में बताते हैं कि बातचीत कैसे काम करती है। How would I implement something similar to the Objective-C @encode() compiler directive in ANSI C?

+2

यह प्रीप्रोसेसर में नहीं किया जा सकता है क्योंकि प्रीप्रोसेसर पूरी तरह से किसी भी प्रकार की जानकारी से अनजान है। – dreamlax

5

@encode निर्देश प्रदान किए गए प्रकार को पार करता है और उस प्रकार के आधार पर एक स्थिर स्ट्रिंग उत्पन्न करता है। सभी सी आदिम प्रकारों (हस्ताक्षरित और हस्ताक्षरित संस्करणों सहित) का एन्कोडिंग और उद्देश्य-सी id और SEL प्रकारों में सभी एकल-वर्ण एन्कोडिंग हैं, इन्हें <objc/runtime.h> में पाया जा सकता है। अधिक जटिल प्रकार जैसे struct एस और सरणी में बड़े एन्कोडिंग हैं।

अधिक जानकारी Objective-C Runtime Programming Guide [पीडीएफ] में उपलब्ध है।

+0

से ट्रैक से बाहर निकल रहे हैं आपकी मदद के लिए धन्यवाद लेकिन मुझे पता है कि यह क्या करता है। मुझे इसमें दिलचस्पी है कि यह कैसे करता है। – Anderson

+2

एक बार स्रोत को एएसटी में पार्स किया गया है, तो '@ एन्कोड' विधि शायद पेड़ को पार करती है और व्यक्तिगत प्रकारों का निरीक्षण करती है और उस से स्ट्रिंग उत्पन्न करती है। – dreamlax

+0

जिस तरह से मैं समझता हूं कि संकलन-समय पर, प्रत्येक श्रेणी के @interface शीर्षलेख की सामग्री के साथ @encode निर्देश का उपयोग करके टाइप डिस्क्रिप्टर उत्पन्न होते हैं। इन प्रकार के वर्णनकर्ता बाइनरी के अंदर संग्रहीत होते हैं और .ctors अनुभाग __attribute __ ((कन्स्ट्रक्टर)) फ़ंक्शन का उपयोग करके रन-टाइम पर प्रत्येक क्लास ऑब्जेक्ट को तुरंत चालू करता है। – Anderson

संबंधित मुद्दे