2011-12-25 14 views
8

क्या यह जांचना संभव है कि कोड के दौरान दिए गए किसी भी बिंदु पर चर किस प्रकार है?रनटाइम पर सी में चर के प्रकार को कैसे जांचें?

उदाहरण के लिए, कहें, मैं char y = 1 घोषित करता हूं; और int SomeFunction (int) कार्य करें। मैं y से someFunction पास करूंगा, इसे int में परिवर्तित कर दिया जाएगा और अंत में int वापस कर दिया जाएगा।

मुझे फ़ंक्शन घोषणा के कारण यह पता है। हालांकि, मैं यह पुष्टि करना चाहता हूं कि someFunction के अंदर, चर int के प्रकार में है और someFunction से लौटाए गए चर के साथ-साथ int भी है।

क्या यह सी में किया जा सकता है, या फ़ंक्शन घोषणा पर इसके बजाय भरोसा किया जाना चाहिए? क्या सी प्रोग्रामिंग भाषा रनटाइम पर परिवर्तनीय प्रकार की जांच करने के लिए कोई तंत्र प्रदान करती है?

+2

'कुछ फ़ंक्शन' के अंदर परिवर्तनीय _in fact_ an 'int' है क्योंकि आप ऐसा कहते हैं। – knittl

+0

तो, सी प्रोग्रामिंग भाषा रनटाइम पर परिवर्तनीय प्रकार की जांच करने के लिए कोई तंत्र प्रदान नहीं करती है? – JAM

+7

सी में, प्रकार केवल संकलन समय पर मौजूद हैं। रनटाइम पर, यह बस चारों ओर घूमने वाली बिट्स का एक गुच्छा है। – Mat

उत्तर

6

अपने कोड में, आप इस तथ्य पर भरोसा कर सकते हैं कि आपके द्वारा दिए गए प्रकारों को यह बताया गया है कि उन्हें कैसे घोषित किया गया था। यदि कोई मामला नहीं था तो आप कोई गैर-मामूली कार्यक्रम नहीं लिख सके।

सी में टाइप जानकारी, हालांकि संकलन समय पर उपलब्ध है। रनटाइम पर, उस जानकारी में से कोई भी मौजूद नहीं है, इसलिए कोई मानक बिल्ड-इन तरीका नहीं है, उदाहरण के लिए, यह बता रहा है कि किस प्रकार की ऑब्जेक्ट यादृच्छिक सूचक के पीछे छिप रही है।
यदि आपको उस तरह की जानकारी की आवश्यकता है, तो देखें कि क्या आपके कंपाइलर के पास एक्सटेंशन हैं (मुझे नहीं पता कि क्या कोई है), या उस ढांचे का उपयोग करें जो उस के लिए आधारभूत संरचना प्रदान करता है (glib में ऐसी चीजें हैं जो मुझे विश्वास है)।
या यदि आप वास्तव में वास्तव में की आवश्यकता है तो अपना खुद का रोल करें।

या सी ++ का उपयोग करें जिसमें कुछ रनटाइम प्रकार की जानकारी का समर्थन होता है, और आम तौर पर एक अधिक जटिल प्रकार की प्रणाली बोलते हैं, लेकिन यह एक पूरी तरह से अलग भाषा है।

+0

देखें मैट धन्यवाद। अच्छा जवाब – JAM

+0

@ मेट, * * आप किसी भी गैर-मामूली प्रोग्राम को नहीं लिख सका अगर यह मामला नहीं था। "*, तो क्या आप कह रहे हैं कि कोई गैर-मामूली PHP/जावास्क्रिप्ट प्रोग्राम नहीं हैं? – Pacerier

+1

@Pacerier: PHP और जावास्क्रिप्ट (और दूसरों का एक समूह) गतिशील रूप से टाइप किए जाते हैं और भाषा अर्थशास्त्र इसके चारों ओर बनाए जाते हैं। सी स्थिर रूप से टाइप किया गया है। – Mat

0

सी प्रकार मुख्य रूप से संकलन समय पर मौजूद हैं।

आप अपने compilers चेतावनी स्तर ऊपर क्रैंक कर सकते हैं बेहतर जाँच प्राप्त करने के लिए (ईजी जीसीसी -ansi -pedantic -Wall), लेकिन मेरा मानना ​​है कि जरूरत के मुताबिक कुछ चीजें अभी भी मजबूर कर दिया जाएगा।

आप कुछ कार्यों के लिए मैन्युअल प्रकार प्रबंधन के लिए एक संघ का उपयोग कर सकते हैं, लेकिन सी में आमतौर पर टाइपिंग जांच के लिए अपने कंपाइलर पर भरोसा करना बेहतर होता है।

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