C ++ स्टाइल आउटपुट के साथ C- स्टाइल printf()
(या puts()
या putchar()
...) आउटपुट को std::cout << ...
मिलाया जाना असुरक्षित हो सकता है। यदि मैं सही ढंग से याद करता हूं, तो उनके पास अलग-अलग बफरिंग तंत्र हो सकते हैं, इसलिए आउटपुट अपेक्षित क्रम में प्रकट नहीं हो सकता है। (जैसा कि एपीग्रामग्राम एक टिप्पणी में उल्लेख करता है, इसे sync_with_stdio
संबोधित करता है)।
printf()
मौलिक रूप से असुरक्षित है। प्रकार एक बहस के लिए उम्मीद प्रारूप स्ट्रिंग से निर्धारित होता है ( "%d"
एक की आवश्यकता है int
या कुछ है कि को बढ़ावा देता है int
, "%s"
एक की आवश्यकता है char*
जो एक सही ढंग से समाप्त सी शैली स्ट्रिंग, आदि को इंगित करना होगा), लेकिन अपरिभाषित व्यवहार में तर्क परिणामों की गलत प्रकार गुजर , एक नैदानिक त्रुटि नहीं। कुछ संकलक, जैसे कि जीसीसी, टाइप मिसमैच के बारे में चेतावनी का एक बहुत अच्छा काम करते हैं, लेकिन वे ऐसा केवल तभी कर सकते हैं जब प्रारूप स्ट्रिंग शाब्दिक है या अन्यथा संकलन के समय (जो सबसे आम मामला है) - और जैसे भाषा द्वारा चेतावनियों की आवश्यकता नहीं है। यदि आप गलत प्रकार के तर्क को पारित करते हैं, तो मनमाने ढंग से खराब चीजें हो सकती हैं।
सी ++ की धारा I / O, दूसरी ओर, बहुत अधिक प्रकार-सुरक्षित है, क्योंकि <<
ऑपरेटर कई अलग-अलग प्रकारों के लिए अतिभारित है। std::cout << x
के प्रकार को निर्दिष्ट करने की आवश्यकता नहीं है x
; संकलक जो भी प्रकार के लिए सही कोड उत्पन्न करेगा x
।
दूसरी ओर, printf
प्रारूपण विकल्प IMHO अधिक सुविधाजनक हैं। यदि मैं दशमलव बिंदु के बाद 3 अंकों के साथ एक फ्लोटिंग-पॉइंट वैल्यू प्रिंट करना चाहता हूं, तो मैं उपयोग कर सकता हूं "%.3f"
- और इसका एक ही printf
कॉल के भीतर भी अन्य तर्कों पर कोई प्रभाव नहीं पड़ता है । setprecision
दूसरी ओर, C ++ की धारा की स्थिति को प्रभावित करता है, और बाद के आउटपुट को गड़बड़ कर सकता है यदि आप स्ट्रीम को उसकी पिछली स्थिति में पुनर्स्थापित करने के लिए बहुत सावधान नहीं हैं। (यह मेरा निजी पालतू जानवर है; अगर मुझे इससे बचने के लिए कोई साफ रास्ता याद आ रहा है, तो कृपया टिप्पणी करें।)
दोनों के फायदे और नुकसान हैं। printf
यदि आप C बैकग्राउंड वाले हैं और आप इससे अधिक परिचित हैं, या यदि आप C सोर्स प्रोग्राम को C ++ प्रोग्राम में आयात कर रहे हैं, तो यह उपलब्धता विशेष रूप से उपयोगी है। std::cout << ...
C ++ के लिए अधिक मुहावरेदार है, और प्रकार के बेमेल से बचने के लिए उतनी देखभाल की आवश्यकता नहीं है। दोनों वैध हैं सी ++ (सी ++ मानक में संदर्भ द्वारा सी मानक पुस्तकालय के अधिकांश शामिल हैं)।
यह शायद का उपयोग करने के लिए सबसे अच्छा std::cout << ...
अन्य सी ++ प्रोग्रामर जो अपने कोड पर काम कर सकते हैं के लिए है, लेकिन आप या तो एक का उपयोग कर सकते हैं - विशेष रूप से पता लगाने कोड में है कि तुम फेंक जा रहे हैं।
और निश्चित रूप से यह डिबगर्स का उपयोग करना सीखने के लिए कुछ समय बिताने के लायक है (लेकिन यह कुछ वातावरण में संभव नहीं है)।
printf
सी ++ दुनिया में? मुझे यहाँ कुछ याद आ रहा है?