2016-03-10 7 views
6

किताब मैं पढ़ रहा हूँ, rand() के अनुसार सी में #include <cstdlib>
आवश्यकता ++ हालांकि, मैं 2015
इन दो नहीं संकलन करने की जरूरत क्यों हैं दृश्य स्टूडियो में #include <cstdlib> है और न ही using namespace std; बिना निम्नलिखित कोड rand() का उपयोग करता है संकलन करने में सक्षम हूँ ? क्या मुझे cstdlib शामिल करना चाहिए?रैंड() cstdlib सहित या नेमस्पेस std का उपयोग किए बिना संकलित क्यों करता है?

सी ++ कोड:

#include <iostream> 

int main() 
{ 
    std::cout << rand() << std::endl; 
} 
+1

आप '/ showIncludes' विकल्प (" सी/सी ++ | उन्नत | दिखाएँ शामिल हैं "के तहत आईडीई के प्रोजेक्ट गुणों में संकलित कर सकते हैं) यह देखने के लिए कि 'stdlib' कैसे शामिल किया जा रहा है। –

+0

@MichaelBurr अब मैं देखता हूं, विजुअल स्टूडियो में आउटपुट से पता चलता है कि iostream cstdlib सहित था। क्या यह जानने का कोई तरीका है कि कौन सी फाइलें सीधे शामिल की जा रही हैं और कौन सा अप्रत्यक्ष रूप से? मैं सिर्फ उत्सुक हूं –

+2

'/ showIncludes' विकल्प का उपयोग करके आउटपुट के इंडेंटेशन का स्तर इंगित करता है कि कौन सा शीर्षलेख अन्य हेडर शामिल करता है। उदाहरण के लिए, वीएस 2015 अपडेट 1, ' 'के साथ केवल सीधे' 'शामिल है - अन्य सभी शीर्षलेखों को अप्रत्यक्ष रूप से' आईट्रीम 'या पदानुक्रम में गहराई से शामिल किया गया है। –

उत्तर

7

वहाँ खेल में दो मुद्दे हैं:

  1. स्टैंडर्ड पुस्तकालय हेडर फाइल अन्य मानक पुस्तकालय हेडर फाइल शामिल हो सकते हैं। तो iostream में सीधे या परोक्ष रूप से cstdlib शामिल हो सकता है।
  2. सी मानक पुस्तकालय समकक्ष के साथ हैडर फ़ाइलें (जैसे cstdlib) (जैसे rand।) यह औपचारिक रूप से सी ++ 11 के बाद से अनुमति दी है, कि है, ग्लोबल नेम स्पेस में सी मानक पुस्तकालय के नाम लाने के लिए अनुमति दी जाती है std नाम स्थान के बाहर , और इससे पहले काफी हद तक बर्दाश्त किया गया था।
+0

"प्रत्यक्ष या परोक्ष रूप से" से आपका क्या मतलब है? –

+3

@JorgeLuque मेरा मतलब है उदा। 'iostream' में 'उपयोगिता' शामिल हो सकती है जिसमें' सीमाएं 'शामिल हो सकती हैं जिसमें 'cstdint' शामिल हो सकता है जिसमें' cstdlib' शामिल हो सकता है। – juanchopanza

4

iostreamcstdlib प्रत्यक्ष या परोक्ष रूप शामिल हो सकते हैं। यह दायरे में std::rand() और ::rand() लाता है। आप बाद वाले का उपयोग कर रहे हैं।

लेकिन हां, आपको इस पर भरोसा नहीं करना चाहिए और cstdlib शामिल करना चाहिए यदि आप rand का उपयोग करना चाहते हैं। और C++ कोड rand का उपयोग नहीं करते हैं, यादृच्छिक संख्या उत्पन्न करने के बेहतर तरीके हैं।

+0

'रैंड()' 'rand()' जैसा ही है? क्या इसे वैश्विक नामस्थान में माना जाता है? –

+2

हां ':: रैंड()' आपके मामले में 'रैंड' जैसा ही है। –

2

आपको निश्चित रूप से प्रासंगिक कोड शामिल करना चाहिए जो आप अपने कोड में उपयोग कर रहे हैं। यह आपको नए संस्करण में संकलक/पुस्तकालयों को अद्यतन करते समय आश्चर्य से बचाता है। मुझे लगता है कि std::rand के सामने using namespace std; का उपयोग करने के मुकाबले एक बेहतर विचार है - लेकिन किसी भी तरह से, नामस्थान के बिना मौजूदा पर भरोसा नहीं करना एक अच्छा विचार है, हालांकि यह अधिकांश जगहों पर काम करने के तरीके के समान होता है सी-कोड के लिए पिछड़ा संगतता।

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