- क्या मुझे C / C ++ शब्द का उपयोग करना बंद कर देना चाहिए?
पूर्ण रूप से। यह स्पष्ट नहीं है कि इस निर्माण को व्यक्त करने के लिए क्या करना है, शायद, सी और सी ++ के बारे में भ्रम उस व्यक्ति की ओर से है जो शब्द का उपयोग करता है।
चूंकि यह भ्रम निराशा का एक सामान्य स्रोत है, इसलिए कई लोग इसके बारे में काफी भावुक हो गए हैं और अकेले उस शब्द का दिखना उनके लिए आपके योगदान के बारे में नकारात्मक बनने के लिए पर्याप्त होगा। यह मूर्खतापूर्ण लग सकता है लेकिन यह प्रतीत होता है कि हमारे पास क्या है।
मेरा सुझाव है कि "C / C ++" के बारे में बात करने के बजाय आप एक ऐसे शब्द का उपयोग करें जो वास्तव में आपका मतलब स्पष्ट करता है।
यदि आप C में ऐसी किसी चीज़ के बारे में बात कर रहे हैं जो C ++ के लिए भी सही हो सकती है या नहीं भी हो सकती है, तो बस C कहें ।
उदाहरण: फ़ंक्शन को C में कैसे main
घोषित किया जाना चाहिए ?
सबसे पहले, ऐसा लग सकता है कि C ++ का उत्तर समान है: int main()
या int main(int, char**)
। लेकिन जैसा कि चर्चा चल रही है, यह इंगित करना प्रासंगिक हो सकता है कि सी ++ में, फ़ंक्शन को वैश्विक दायरे में घोषित किया जाना है, जो सी में समझ में नहीं आता है, क्योंकि इसका कोई namespace
एस नहीं है । दूसरी ओर, C main
पुनरावर्ती कॉल करने की अनुमति देता है जबकि C ++ नहीं करता है। C ++ में, एक निहितार्थ है return 0;
यदि आप "गिर जाते हैं" main
लेकिन C में return
किसी भी पथ पर विवरण आवश्यक है। सूची आगे बढ़ती है और यह चर्चा को और सरल बना देता है यदि आप इसे स्पष्ट कर दें कि जिस भाषा पर चर्चा की जानी है वह क्या है।
यदि आप C ++ में किसी ऐसी चीज के बारे में बात कर रहे हैं जो C के लिए भी सही हो सकती है या नहीं भी हो सकती है, तो बस C ++ कहें ।
उदाहरण: क्या सी का एक malloc()
सरणी सरणी int
शुरू में सी ++ में ऑल-जीरो होगा?
C के लिए संक्षिप्त उत्तर समान होना चाहिए: नहीं। लेकिन जैसा कि उत्तर चलता है, यह इंगित करने के लिए सार्थक हो सकता है कि सी में, calloc
एक अच्छा विकल्प होगा जबकि सी ++ std::vector<int>
में, पहले स्थान पर एक बेहतर विकल्प हो सकता है।
यदि आप C और C ++ के बीच समानता को इंगित करना चाहते हैं, तो C और C ++ कहें ।
उदाहरण: C और C ++ में, sizeof
एक int
कार्यान्वयन परिभाषित किया गया है और संकलनकर्ता और आर्किटेक्चर के बीच भिन्न हो सकते हैं।
यहाँ, हम यह बताना चाहते हैं कि C और C ++ समान व्यवहार करते हैं। हम स्पष्ट रूप से दोनों भाषाओं के बारे में बात कर रहे हैं।
मैं वास्तव में सलाह देता हूं कि आप और भी विशिष्ट हों और न केवल "C" या "C ++" बल्कि सटीक संस्करण के बारे में बात करें। दोनों भाषाएं विकसित हो रही हैं और एक कुंद कथन जैसे कि
C ++ समर्थन /* … */
और // …
टिप्पणी करता है जबकि C केवल /* … */
शैली का समर्थन करता है।
न तो सही है और न ही गलत है।
- यदि # 1 का उत्तर हां है, तो मैं ऐसे प्रोग्राम को कैसे कहूंगा जो C और C ++ के मिश्रण का उपयोग करता है?
चूंकि भाषाओं में ओवरलैप होता है, इसलिए प्रत्येक C प्रोग्राम में ऐसे भाग होंगे जो C ++ की तरह दिख सकते हैं और इसके विपरीत। फिर भी, लेखक शायद C या C ++ कंपाइलर का उपयोग करके निपट गए होंगे। तो कहते हैं कि "कार्यक्रम सी में लिखा है " अगर यह एक सी संकलक के साथ संकलित है और "कार्यक्रम सी ++ में लिखा गया है " अगर वे सी ++ संकलक का उपयोग करते हैं, भले ही वे किसी भी आधुनिक सी ++ सुविधाओं का उपयोग करने से इनकार कर सकते हैं। कुछ लोग ऐसे C ++ कोड को C- शैली C ++ के रूप में संदर्भित करते हैं । ओवरलोडिंग, अपवादों, बहुरूपता, टेम्पलेट्स और I / O की अनुपस्थिति ऐसे कोड की एक सामान्य विशेषताएं हैं।
यदि, इसके बजाय, कुछ फाइलें C में लिखी गई हैं और C संकलक के साथ संकलित की गई हैं और कुछ अन्य फाइलें C ++ में लिखी गई हैं और C ++ संकलक के साथ संकलित की गई हैं, और फिर वस्तु फाइलें एक साथ जुड़ी हुई हैं, तो मैं कहूंगा कि "कार्यक्रम में लिखा गया है C और C ++ का मिश्रण , जैसा कि वास्तव में, आपने पहले ही किया था।
हालाँकि, अगर, इसके बजाय, लेखकों ने प्रत्येक फ़ाइल को इस तरह से लिखने में बहुत सावधानी बरती है कि इसे C या C ++ कंपाइलर के साथ संकलित किया जा सके और परिणामी प्रोग्राम वही काम करेगा, तो आप कह सकते हैं कि "प्रोग्राम C और C ++ के एक सामान्य सबसेट में लिखा गया है ।
उत्तरार्द्ध अक्सर हेडर फ़ाइलों के लिए मामला होता है जिसे सी और सी ++ कोड के बीच साझा किया जाना चाहिए। इस तरह के कोड लिखना आसान नहीं है। आप आगे जोर देना है कि केवल इस तरह के निर्माणों का उपयोग किया गया है कि C और C ++ में मान्य हैं चाहते हैं और व्यापक रूप से विभिन्न संकलक विक्रेताओं द्वारा समर्थित हैं, अवधि एक पोर्टेबल C और C ++ के आम सबसेट इस्तेमाल किया जा सकता है इस पर जोर देना।
- यह देखते हुए कि दोनों "अलग-अलग" भाषाएं हैं, यह संभावना है कि कुछ बिंदु पर सी ++ कंपाइलर सी भाषा में लिखे गए कोड का समर्थन करना बंद कर देते हैं (क्योंकि आधुनिक सी ++ बिंदुओं, गतिशील मेमोरी हैंडलिंग आदि जैसे बुनियादी सामान के लिए सी मानसिकता से विचलन कर रहा है)?
मुझे यकीन नहीं है कि मैं इस सवाल को समझता हूं। चूंकि C और C ++ अलग - अलग भाषाएं हैं, इसलिए आप उनमें से किसी एक के लिए लिखे गए प्रोग्राम को स्वीकार करने के लिए कंपाइलर से उम्मीद नहीं कर सकते। हालांकि, कंपाइलर अक्सर एक मॉड्यूलर तरीके से डिज़ाइन किए जाते हैं और यदि एक कंपाइलर में C ++ फ्रंट-एंड है , तो संभावना अच्छी है कि इसमें C फ्रंट-एंड भी होगा। (फिर आप कमांड लाइन स्विच या इसी तरह के साधनों के माध्यम से उनमें से किसका चयन करना चाहते हैं।) जब तक दोनों भाषाओं का व्यापक उपयोग होगा, यह बहुत संभावना नहीं है कि यह बदलने वाला है। "आधुनिक सी ++" के बारे में आपका कहना है कि मुझे लगता है कि मूल रूप से अच्छे कोडिंग मानकों और मानक पुस्तकालय का मामला है। से संकलक के दृष्टिकोण से, दोनों भाषाओं के विकास के बजाय अपसारी से converging है।
- क्या अनुकूलता बनाए रखने के लिए C / C ++ के मानक बनाने वाले लोगों के बीच अभी कोई सहयोग है?
हाँ। मेमोरी मॉडल और परमाणु संचालन पुस्तकालय C ++ 11 और C11 में पेश किया गया एक अच्छा उदाहरण है। ऐसा लगता है कि दोनों भाषाओं के डिजाइनरों को एहसास है कि संगतता महत्वपूर्ण है और इसे सुधारने की दिशा में काम कर रहे हैं। व्यक्तिगत रूप से, मैं चाहूंगा कि सहयोग और अधिक तीव्र हो और दो आईएसओ काम करने वाले समूह भी शायद शामिल हों, लेकिन मेरी इच्छाएं महत्वपूर्ण नहीं हैं।
Bjarne Stroustrup , C ++ प्रोग्रामिंग लैंग्वेज के 4th संस्करण के edition 44.3 में C और C ++ के विभिन्न संस्करणों के बीच अंतर और समानता के बारे में बात करता है, जिसे विडंबना कहा जाता है, जिसे "C / C ++ संगतता" कहा जाता है। इस मामले में इस शब्द का उपयोग वास्तव में उचित हो सकता है क्योंकि यह स्पष्ट है कि इसका मतलब क्या है।
- यदि # 4 हां है, तो इस तरह के सहयोग निकट भविष्य में आधुनिक C ++ (11/14/17) की उपस्थिति के साथ समाप्त हो सकते हैं
जैसा कि ऊपर चर्चा की गई है, यह C ++ 11 में हुआ और फिर से होने की उम्मीद / उम्मीद / अपेक्षित है।