2011-10-15 13 views
8

मैं मिनी स्नू से जी ++ का उपयोग कर वेब से कुछ स्निपेट का परीक्षण कर रहा हूं। यह सी ++ कंपाइलर है ... फिर यह सही ढंग से सी संकलित क्यों करता है .... लोग सी और सी ++ क्यों इंटरटवाइन करते हैं।प्रिंटफ/स्कैनफ बनाम cout/cin का उपयोग कब करें?

ठोस सवाल यह है: क्या यह ओ.के. है। सी और सी ++ दोनों का उपयोग करने और जी ++ के तहत संकलित करने के लिए। अगर उत्तर हाँ है, तो यह मेरे जीवन को आसान बनाता है क्योंकि मुझे कोड को संशोधित करने की आवश्यकता नहीं है।

अजीब तरह से पर्याप्त ... कुछ सी ++ काम करने के लिए प्राप्त करने के लिए, खासकर जब एक ifstream निर्माता के लिए एक स्ट्रिंग गुजर यह एक सी प्रकार स्ट्रिंग ... आवश्यकता है

मेरा अनुमान होगा कि क्योंकि सी ++ निर्भर करता है सेल्सियस पर निर्माण करती है पर दो भाषाओं को एक साथ लिखना ठीक है।

हालांकि शैली के मामले में आपको cout/cin या printf/scanf पर व्यवस्थित होना चाहिए।

+0

सी अनिवार्य रूप से सी ++ का सबसेट है। सी ++ के समय तक सी में कोड के टन थे (अभी भी हैं) ताकि आप दोनों भाषाओं को असंगत बनाने की उम्मीद न कर सकें। – FailedDev

+1

नोट: सी ++ 11 के रूप में, आप 'std :: ifstream' को 'const std :: string &' से भी बना सकते हैं (उदाहरण के लिए [अंतिम ड्राफ्ट] की धारा 27.9.1.7 देखें (http: // www। open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf))। – reima

उत्तर

5

कुछ विषमताएं हैं जहां char* की आवश्यकता है। आप .c_str()std::string की विधि को प्राप्त करने के लिए अंतर को पुल कर सकते हैं।

अधिकांश भाग के लिए, सी ++ का सी सबसेट संगत है।

http://en.wikipedia.org/wiki/Compatibility_of_C_and_C%2B%2B

आप एक सी ++ संकलक के तहत सी कोड के स्निपेट संकलन कर रहे हैं, का उपयोग करने के लिए "c इसे बदलने के लिए सुनिश्चित हो: यह वास्तव में कैसे नहीं है संगत अधिकांश भाग के लिए कोई फर्क की संभावना नहीं है "आपके में lib lib प्रारूप शामिल है ...

http://www2.research.att.com/~bs/new_learning.pdf

एक बहुत होते हैं: उदाहरण के #include <cstdio> बजाय #include <stdio.h>

Is it bad practice to use a C header instead of its C++ equivalent in C++ (e.g. stdio.h instead of cstdio)?

खुद Bjarne से एक काफी तर्क तर्क क्यों scanf से बचने के लिए पर के लिए के लिए, इस पत्र की शुरुआत की जाँच printf के बजाय iostreams का उपयोग करने के लाभों के साथ-साथ:

'printf' vs. 'cout' in C++

+0

वैसे प्रिंटफ और स्कैनफ के बारे में उनका तर्क स्कैनफ पर पूरी तरह केंद्रित है। प्रिंटफ बनाम कोउट का उपयोग करना राय की बात है, क्योंकि दोनों के पास फायदे और नुकसान हैं। धाराओं के साथ स्वरूपण सामग्री आवश्यक से अधिक जटिल है और धाराओं के ओओपी पहलू बग को छुपा सकते हैं (उदाहरण के लिए 'cout << यह' बनाम' cout << * यह')। – Voo

+0

क्यों-नहीं-उपयोग-printf के लिए एक सहायक लिंक के साथ अद्यतन किया गया। इससे कोई फर्क नहीं पड़ता * जितना * सच है। लेकिन मुझे अभी भी लगता है कि एक स्ट्रिंग में एक अनचेक मिनी स्वरूपण भाषा का उपयोग करने की अवधारणा सी ++ भावना के प्रति विरोधी है। यह उन मामलों के समान है जो मैंने देखा है जहां किसी ने "एक्सएमएल प्रारूप" बनाया है जो सीडीएटीए का एक बड़ा हिस्सा और बड़ा ब्लब्स था। उस समय आप एक .XML * फ़ाइल * में हैं लेकिन आपका डेटा वास्तव में "एक्सएमएल" नहीं है। वही अगर आप "प्रिंटफ भाषा में प्रोग्रामिंग" कर रहे हैं और सी ++ टाइप सिस्टम को छोड़कर और संकलन समय पर सब कुछ जांचने की अनुमति नहीं देते हैं। – HostileFork

+0

मुझे इतना यकीन नहीं है कि टाइप-सुरक्षा यह है कि धाराओं में से अधिकतर कुछ भी स्वीकार करते हैं, इसलिए आप आसानी से अवांछित परिणाम प्राप्त कर सकते हैं। इसके अलावा जीसीसी गैर-मेलिंग तर्क सूची को कम से कम समस्या बनाता है (यह अभी भी है, खासकर अन्य कंपाइलर्स पर)। I/ostream के उत्तराधिकारी होने में सक्षम होने में कुछ स्थितियों में कोई संदेह नहीं है। कुछ लोग दूसरे पर एक वाक्यविन्यास पसंद करते हैं, इसलिए यह एक या दूसरे के लिए लाभ नहीं है। सी ++ में धाराओं के बारे में मुझे एक चीज है जो उनकी स्वरूपण क्षमताओं है। स्ट्रीम के साथ कुशलता से '%। * S' की तरह कुछ करने का प्रयास करें। – Voo

0

यदि आप सी ++ का उपयोग करते हैं, तो सी ++ का उपयोग करें। (cin, cout)
क्यों fstream मुझे सी स्ट्रिंग पहेली भी लेता है।

2

क्या यह ओ.के. है। सी और सी ++ दोनों का उपयोग करने और जी ++ के तहत संकलित करने के लिए।

हां, दो भाषाओं को मिश्रण करना ठीक है। यह कोड के साथ आम है जो सी के रूप में शुरू हुआ, लेकिन फिर अधिक से अधिक सी ++ फीचर्स जोड़े गए (स्पष्ट रूप से किसी ने रास्ते में कंपाइलर बदल दिया)।

आम तौर पर, सी कोड संकलित और सी ++ कंपाइलर के साथ चलाएगा। सी कोड में चीजों के नाम के लिए class और virtual जैसे कीवर्ड के उपयोग जैसे कई संभावित अपवाद हैं, या सी के आराम से कास्टिंग नियम हैं।

आप अक्सर लोगों को यह कहते हुए सुनेंगे कि "वे बहुत अलग भाषाएं हैं"। ऐसा इसलिए है क्योंकि प्रोग्रामिंग प्रश्न आप पूछते हैं कि आप किस भाषा का उपयोग करने की कोशिश कर रहे हैं, इस पर निर्भर करते हुए शायद आपके पास एक अलग उत्तर है। हालांकि, बहुत सारी समानताएं और पीछे की संगतता पहलुओं के साथ-साथ बहुत सारे हैं।

+1

वास्तव में नहीं। सी में चीजें हैं जो सी ++ के रूप में संकलित नहीं होंगी। –

+0

@CatPlusPlus: मैंने अधिक स्पष्टीकरण के साथ अपना उत्तर अपडेट किया। –

3

सी ++ भाषा सी से इसकी मुख्य कार्यक्षमता प्राप्त करती है। ऐसा इसलिए है क्योंकि सी ++ सी से लिया गया था। सी ++ मानक में सी मानक के संदर्भ में शामिल है। इसलिए आप सी संरचनाओं, मुहावरों और प्रतिमानों का उपयोग करके कोड लिखने के लिए सी ++ कंपाइलर का उपयोग कर सकते हैं। ऐसा करने के लिए अक्सर सी ++ का उपयोग "बेहतर सी के रूप में" के रूप में किया जाता है।

उपरोक्त का लंबा और छोटा हिस्सा हाँ है, आप C++ कोड में printf का उपयोग कर सकते हैं। ऐसा करने से मानक द्वारा स्पष्ट रूप से अनुमति दी जाती है।

ऐसा करने से अक्सर सी ++ को परिभाषित करने वाली कई विशेषताओं को अनदेखा कर दिया जाएगा। मैं उस बातचीत को किसी अन्य प्रश्न के लिए छोड़ दूंगा लेकिन यह कहने के लिए पर्याप्त है कि बहुत से लोग आपको बताएंगे कि "ऐसा मत करें" या "वह सी ++ नहीं है।" यह कारणों को अलग करता है कि आप C12+ प्रोग्राम में printf का उपयोग क्यों नहीं करना चाहते हैं या वास्तव में आप क्यों चाहते हैं। लेकिन बाकी आश्वासन दिया कि यह तकनीकी रूप से अनुमति है।

+0

हैंडहोल्ड से पोस्ट करना। कई टाइपो। माफ़ कीजिये। –

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