मेरे पास std::setenv
पर एक साधारण कॉल है, जो gcc
के तहत मेरे लिनक्स वितरण पर ठीक काम करता है। हालांकि, मेरे मैक ओएस एक्स पर clang
का उपयोग करते समय, मुझे निम्न त्रुटि मिलती है।सी ++ मानक लाइब्रेरी - std :: setenv बनाम setenv
error: no member named 'setenv' in namespace 'std'; did you mean simply 'setenv'?
std::setenv(name.c_str(), value.c_str(), true);
मुझे यकीन है, मैं पढ़ा है कहीं कि setenv
सी ++ 11 में नाम स्थान std
का हिस्सा था, लेकिन अब मैं अनिश्चित हूँ।
प्रश्न: setenv
या std::setenv
का उपयोग किया जाना चाहिए, और यह मामला क्यों है?
सी ++ मानक 'setenv' को परिभाषित नहीं करता है, इसलिए यदि कार्यान्वयन इसे किसी भी एक्सटेंशन के रूप में परिभाषित करता है, तो वे वैश्विक नामस्थान, 'std' नेमस्पेस या किसी अन्य नामस्थान का उपयोग कर सकते हैं, हालांकि वे फिट दिखाई देते हैं। ओपी का कार्यान्वयन जो इसे 'std' नेमस्पेस में घोषित करता है, वह ओपी के अन्य कार्यान्वयन के समान मान्य है जो नहीं करता है। (स्पष्टीकरण के लिए: मैं सहमत हूं कि ओपी का उपयोग करने के लिए सादा 'setenv' है, लेकिन आपका उत्तर इस तरह आता है कि' std :: setenv' काम एक बग है।) – hvd
@hvd लेकिन आगे के दस्तावेज़ों की कमी (I POSIX एक के अलावा किसी भी 'setenv' को नहीं जानते और न ही), मुझे लगता है कि वह पॉज़िक्स के बारे में बात कर रहा है और सोच रहा है कि यह मानक सी ++ फ़ंक्शन भी है। चूंकि POSIX फ़ंक्शन 'नेमस्पेस std' में नहीं है, इसलिए वैश्विक कॉल इसे एक्सेस करने का सामान्य तरीका होगा। जबकि लिनक्स पर स्पष्ट रूप से जीसीसी जैसे कुछ प्लेटफ़ॉर्म इसे 'नेमस्पेस std' में जोड़ते हैं, मानक जो इसे परिभाषित करता है। क्या मै गलत हु? –
@ एचवीडी नोट भी मैंने कभी नहीं कहा कि 'std :: setenv' को काम करने की अनुमति नहीं है, बस गारंटी नहीं है। –