2010-12-08 12 views
8

के बीच संबंध जब स्ट्रॉस्ट्रुप सी ++ डिजाइन कर रहा था, तो उनके लक्ष्यों में से एक यह था कि सी ++ जितना संभव हो उतना सी का सुपरसैट था। मैं समझता हूं कि यह मामला 100% नहीं है, लेकिन सी में सबसे अच्छा कोड सी ++ कोड भी है।सी और सी ++

लेकिन मैं सुन रहा हूँ कि C99 कि सी ++ नहीं है (VLA) की तरह बहुत सी बातें समर्थन करता है, और वहाँ भी C1x या C0x जो कुछ भी यह कहा जाता है होने जा रहा है कि। तो, सी ++ केवल पुराना C89 का एक सुपरसेट है और उसके बाद से सी और सी ++ बहुत अधिक स्वतंत्र रूप से विकसित हो रहे हैं?

+0

[सी + भाषाओं करीब लाने (जहां यह उचित है) करने के लिए चल रहे प्रयासों रहे हैं में शामिल किया गया + 0x] (http://en.wikipedia.org/wiki/C%2B%2B0x) अगला सी ++ संस्करण है। – darioo

+2

@darioo: वास्तव में ?! :) –

+0

@ आर्मेन: यही वह है जो वे कहते हैं ;-) संपादित करें: मैंने सोचा था कि आपने सी ++ 0x का मतलब था जब आपने 'सी 1 एक्स' या 'सी 0 एक्स' का उल्लेख किया था। – darioo

उत्तर

7

सी ++ सी 8 9/सी 0 9 के निकट सुपरसैट है। (हालांकि, सी या सी ++ के रूप में इसे संकलित करने में सक्षम होने के उद्देश्य से कोड लिखने की अनुशंसा नहीं की जाती है।) तब से, सी 99 अलग हो गया। नए सी ++ मानक (जिसे अक्सर सी ++ 0x कहा जाता है) के पास अधिक संगत होने का कुछ प्रयास होगा, लेकिन सी 99 परिवर्तनीय-लंबाई सरणी जैसी चीजें नहीं होने वाली हैं। स्ट्रॉस्ट्रप ने सी समिति के कुछ कार्यों के साथ निराशा व्यक्त की है, जाहिर है कि उन्हें सी ++ संगतता के करीब रहने की कोशिश करने की उम्मीद है।

तो, हाँ, भाषाएं अलग हो रही हैं।

+0

+1, सी को कमजोर टाइप किया गया है जबकि सी ++ टाइप-सिस्टम अनुमोदित नहीं है। –

+1

यह कहा गया है कि सी ++ अच्छा सी – MSalters

+1

@MSalters का सुपरसैट है: मेरी राय में पूरी तरह सही ढंग से नहीं कहा गया। 'int * foo = malloc (42 * sizeof (int));' उचित सी है, लेकिन C++ में संकलित नहीं होगा। 'Malloc' में '(int *)' कास्ट जोड़ना इसे C++ में संकलित करता है, लेकिन सी में केवल एक चीज होती है यदि आप ' शामिल करना भूल गए हैं। चूंकि मैं उस मामले में भाग गया था, इसलिए मैं यह जानने का एक वकील रहा हूं कि आप सी या सी ++ लिख रहे हैं, और सामान्य सबसेट में खुद को प्रतिबंधित नहीं कर रहे हैं। यह सच है कि खराब सी संरचनाएं सी ++ में काम नहीं करती हैं। –

4

यह सही है। सी ++ मूल रूप से विकसित होने पर सी के सुपरसैट के रूप में शुरू हुआ। उस समय से, दोनों दूसरे से स्वतंत्र हो गए हैं।

+1

मुझे यकीन नहीं है कि सी ++ कभी भी सी के किसी भी संस्करण का सख्त सुपरसेट था। निश्चित रूप से पहला सी ++ मानक 100% सी-संगत नहीं था। –

+1

@ मार्सेलो: स्ट्रॉस्ट्रप की "सी ++ के डिजाइन और विकास" का उल्लेख है कि कक्षाओं के साथ 1 9 80 सी सी के साथ पूरी तरह से संगत नहीं था, 'इंट क्लास' के रूप में, ठीक सी और वर्गों के साथ अवैध सी था। सी ++ में विकास ने अधिक असंगतताओं को पेश किया। –

3

भाषाओं को संगत के रूप में संगत रखने के लिए एक ठोस प्रयास है, और सी ++ 0x कुछ सी 99 के परिवर्तनों को अपनाएगा। लेकिन ऐसा लगता है कि वे कुछ हद तक अलग हो जाएंगे, वीएलए सबसे उल्लेखनीय विसंगति है। मुझे नहीं पता कि सी ++ restrict को अपनाएगा।

+0

अगला सी ++ मानक लगभग पूरा हो गया है, और इसमें कोई सुविधा वृद्धि नहीं होगी। चूंकि यह मानक है जो सी 99 संगतता सुविधाओं को शामिल करेगा, मैं कहूंगा कि वे दूर जा रहे हैं। –

+1

@ डेविड: क्या आप किसी चीज से असहमत हैं? –

+0

नाइटपिकिंग, मुझे लगता है। आपने कहा कि ऐसा लगता है कि वे अलग हो जाएंगे; मैं कह रहा हूं कि अभ्यास में वे पहले से ही अलग हो गए हैं। –

1

यहां तक ​​कि पुरानी सी, उर्फ ​​सी 8 9 के लिए, हुड के तहत भी अंतर को संभालना मुश्किल है, ऑपरेटरों से रिटर्न जो एक के लिए लालसा है, न कि दूसरे के लिए, नियंत्रण प्रवाह जो एक के लिए मान्य है और दूसरे आदि नहीं। ठीक हैं, प्रोटोटाइप के साथ काम करता है के लिए एक इंटरफेस स्तर, struct आदि

भाषाओं यह और भी अधिक diverges के नए संस्करण के लिए पर है, क्योंकि यहां तक ​​कि इंटरफ़ेस संगतता बनाए रखने के लिए मुश्किल हो सकता है। सी 99 में पहले से ही static कीवर्ड सरणी फ़ंक्शन पैरामीटर की सीमाओं के लिए है, संकलन समय स्थिरांक की अवधारणाएं दोनों भाषाओं में काफी अलग हैं, सी ++ पुराने कीवर्ड (auto) का पुन: उपयोग करना शुरू कर देता है और आरक्षित नामस्थान में नहीं होने वाले नए कीवर्ड का अत्यधिक उपयोग करता है ...

तो हाँ, मुझे लगता है कि विभाजन बढ़ेगा, और दोनों समुदायों के लिए तलाक स्वीकार करने और अलग से मिलने की कोशिश करने के लिए शायद बेहतर होगा।

+0

मुझे लगता है कि दोनों ने पहले ही तलाक को "भर्ती" कर लिया है, लेकिन वे अभी भी जितना संभव हो उतना पाने की कोशिश करते हैं, जो एक समझदार चीज़ की तरह लगता है। – jalf

+0

@jalf: उन्हें तोड़ने की जरूरत है। मनोरंजक बात यह है कि यदि आप सी ++ से बाहर निकलते हैं, तो यह केवल 80 के दशक से अत्यधिक जटिल दुःस्वप्न भाषा छोड़ देता है। फिर भी, कुछ और अपडेट दिए गए, और हास्यास्पद सी संगतता शम को छोड़कर, और सभी पुरातन वाक्यविन्यास और बॉयलरप्लेट को हटाकर, सी ++ वास्तव में एक सभ्य भाषा हो सकती है। मुझे यह व्यवहार्य नहीं दिख रहा है। –

3

उस विषय पर प्रकाश डालता है Bjarne Stroustrup द्वारा एक दिलचस्प लेख: Sibling Rivalry: C and C++ (पीडीएफ)

+0

गाह। उन्होंने रैली समर्थन के लिए भाषाओं में "समानता" का दुरुपयोग करने का आग्रह किया। –

1

लेकिन सी में अच्छा कोड के सबसे भी सी ++ कोड है।

सं

मैं कहूँगा कि सबसे अच्छा सी कोड एक सी ++ संकलक का उपयोग कर compilable है।
यह सी ++ कोड नहीं बनाता है।

सी ++ केवल पुराने सी 8 9 का सुपरसैट है और तब से सी और सी ++ बहुत अधिक स्वतंत्र रूप से विकसित हो रहे हैं?

सी ++ C89 के आधार पर किया गया था।
सी C99 के साथ बढ़ा दिया गया था जो की बहुत कम सी ++ 03
अंतर को कम करने और के लिए C++ 0x

+1

कहने का दावा है कि "अच्छा सी कोड भी सी ++ कोड है", यह नहीं कि "अच्छा सी कोड भी * अच्छा * सी ++ कोड" है। लेकिन हाँ, यह एक महत्वपूर्ण अंतर है। – aschepler