2013-05-07 5 views
10

§6.2.7.5 से (पेज 66):सी में एक समग्र प्रकार क्या है?

उदाहरण के बाद दो फ़ाइल गुंजाइश घोषणाओं को देखते हुए:

int f(int (*)(), double (*)[3]); 
int f(int (*)(char *), double (*)[]); 

समारोह के लिए जिसके परिणामस्वरूप समग्र प्रकार है:

int f(int (*)(char *), double (*)[3]); 

से ऊपर उदाहरण, वे समझाते हैं कि एक समग्र प्रकार एक प्रकार है, जो दो अलग-अलग प्रकार के साथ संगत है। मैं समझदारी से "समग्र प्रकार" वाक्यांश को "संरचनाओं और संघों" के रूप में समझता हूं, जो कि ऑफ-टार्गेट के रूप में दिखाई देता है।

सी में एक समग्र प्रकार क्या है और इसके लिए इसका क्या उपयोग किया जाता है? क्या कोई विवरण में ऊपर दिए गए उदाहरण को समझा सकता है?

+3

मुझे लगता है कि तुम्हारा मतलब §6.2.7? – unwind

+0

क्या आप कि उपरोक्त उदाहरण पाठ करने के लिए स्क्रॉल करने पर विचार (6.2.7/3) जहां आश्चर्यजनक रूप से, समग्र प्रकार की परिभाषा कहा गया है? – Lundin

+0

हां, 6.2.7, मेरी गलती। मैंने परिभाषा (दो बार) पढ़ी, लेकिन इसे समझ में नहीं आया। मैं वास्तव में भी उलझन में हूं कि कैसे "डबल (*) [3]" का उपयोग किया जाएगा। – Vorac

उत्तर

5

मैं सहज वाक्यांश "समग्र प्रकार" अर्थ "संरचनाओं और यूनियनों" है, जो जिस तरह से ऑफ-टारगेट प्रतीत होता है के रूप में समझना होगा।

सी भाषा परिभाषा में, सरणियों और structs कुल प्रकार (एक से अधिक तत्वों से बना प्रकार) कर रहे हैं। यूनियन अपने स्वयं के जानवर हैं, क्योंकि वे एक समय में केवल एक तत्व के मूल्य को ले सकते हैं।

कंपोजिट प्रकार हमारे पास रन-ऑफ-द-मिल कोड बंदरों की बजाय कंपाइलर कार्यान्वयनकर्ताओं के लिए अधिक समस्याएं हैं।आप और मैं एक समग्र प्रकार को परिभाषित करने का प्रयास नहीं करेंगे, या उस प्रकार की वस्तुओं की घोषणा नहीं करेंगे।

दिए गए उदाहरण में, आप जो एक-दूसरे से थोड़े भिन्न होते एक समारोह f के लिए दो फ़ाइल गुंजाइश घोषणाओं की है। 6.2.7/3 में प्रस्तुत नियमों के आधार पर, संकलक एक प्रकार है कि दोनों के लिए काम करता है, ऐसी है कि वह भी थोड़ा अलग घोषणाओं के साथ, संकलन समय (यानी, f के लिए किसी भी कॉल ठीक से जाँच की जा सकती में प्रकार अर्थ विज्ञान लागू कर सकते हैं निर्धारित करता है) और फ़ंक्शन को कॉल करने के लिए उचित मशीन कोड जेनरेट करें।

6

मैं शायद सही व्यक्ति इस जवाब देने के लिए नहीं कर रहा हूँ, लेकिन क्या इसके लायक है, यहाँ C99 औचित्य है, जो सहायक हो सकता है है:

6.2.7 संगत प्रकार और समग्र प्रकार

संगत प्रकार और समग्र प्रकार की अवधारणाओं को C89 को उन स्थितियों पर चर्चा करने की अनुमति देने के लिए पेश किया गया था, जिसमें किस तरह की घोषणाओं की समानता की आवश्यकता नहीं है। ये शब्द अपूर्ण प्रकार और एक पूर्ण प्रकार के बीच संबंधों को समझाने में विशेष रूप से उपयोगी होते हैं। सी 99 में वैरिएबल लम्बाई सरणी (§6.7.5.2) के अतिरिक्त, सरणी प्रकार संगतता बढ़ा दी गई थी ताकि परिवर्तनीय लंबाई सारणी की एक सरणी के साथ संगत हों और एक अपूर्ण प्रकार के साथ एक सरणी हो।

दो अलग अनुवाद इकाइयों में संरचना, संघ, या गणना प्रकार घोषणाओं औपचारिक रूप से एक ही प्रकार की घोषणा नहीं करते हैं, भले ही इन घोषणाओं के पाठ एक ही हेडर फाइल से आते हैं, के बाद से अनुवाद इकाइयों खुद को संबंध तोड़ना है। इस प्रकार मानक ऐसे प्रकारों के लिए अतिरिक्त संगतता नियम निर्दिष्ट करता है ताकि दो ऐसी घोषणाएं संगत हों यदि वे पर्याप्त रूप से समान हों। अलग अनुवाद इकाइयों में C99

संरचनाएं या संघ प्रकार घोषणाओं में

शांत बदलें अब संगत होना समान टैग होना आवश्यक है।

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