2009-05-02 9 views
12

बहिष्कृत किया गया है, कहीं समय में मैंने कॉलेज में कुछ सी और सी ++ किया था, लेकिन मुझे सी ++ पर बहुत ध्यान नहीं मिला। अब मैं सी ++ पर कुछ ध्यान देना चाहता हूं लेकिन जब मैं getch() फ़ंक्शन का उपयोग कर रहा हूं, तो मुझे नीचे से चेतावनी मिलती है।गेट को

चेतावनी C4996: 'getch': इस आइटम के लिए POSIX नाम बहिष्कृत किया गया है। इसके बजाय, आईएसओ सी ++ अनुरूप नाम का उपयोग करें: _getch। जानकारी के लिए ऑनलाइन मदद देखें।

अब, मैं उपयोग कर रहा हूँ 2005 एक्सप्रेस, और मैं इस चेतावनी के बारे में क्या करना नहीं जानता। मुझे के बाद getch() का उपयोग करने की आवश्यकता है एक त्रुटि संदेश या कुछ और जिसके लिए एक महत्वपूर्ण हिट की आवश्यकता है।

क्या आप इसके साथ मेरी मदद कर सकते हैं?

+3

के बजाय _getch() का उपयोग करें क्या आपने त्रुटि संदेश पढ़ा था? – jalf

+2

@jalf: "त्रुटि संदेश" गलत/भ्रामक है, इसलिए मुझे नहीं लगता कि यह कैसे पढ़ेगा ... –

+12

@R ..: नहीं, यह नहीं है। यह चेतावनी जारी करने के लिए संकलक के कारण को स्पष्ट रूप से बताता है, और यह स्पष्ट रूप से बताता है कि वे चेतावनी से बचने के लिए आप क्या करना चाहते हैं। आप और मैं मानक कार्यों को "बहिष्कृत" करने के लिए माइक्रोसॉफ्ट के एकपक्षीय फैसले से सहमत नहीं हो सकता है, लेकिन चेतावनी इस मुद्दे को स्पष्ट रूप से बताती है, चाहे आप अंतर्निहित तर्क से सहमत हों या नहीं। अगर आप चेतावनी को दूर करना चाहते हैं, और चेतावनी वास्तव में कहती है "कृपया इसके बजाय इस फ़ंक्शन का उपयोग करें", तो चेतावनी पढ़ने से निश्चित रूप से मदद मिलती है। – jalf

उत्तर

23

माइक्रोसॉफ्ट ने बिना अंडरस्कोर के नाम को चिह्नित करने का निर्णय लिया, क्योंकि उन नामों को प्रोग्रामर के लिए आरक्षित करने के लिए आरक्षित किया गया है। कार्यान्वयन विशिष्ट एक्सटेंशन को वैश्विक नामस्थान में अंडरस्कोर से शुरू होने वाले नामों का उपयोग करना चाहिए यदि वे सी या सी ++ मानक का पालन करना चाहते हैं - या उन्हें खुद को संयुक्त मानक अनुपालन पर्यावरण, जैसे कि पीओएसईक्स/एएनएसआई/आईएसओ सी के रूप में चिह्नित करना चाहिए, जहां ऐसा फ़ंक्शन तब उन मानकों में से एक से मेल खाता है।

पी 0 जे प्लोगर द्वारा स्पष्टीकरण के लिए, this answer about getcwd() भी पढ़ें, जो निश्चित रूप से सामान अच्छी तरह से जानता है।

यदि आप उपयोगकर्ता द्वारा टाइप की गई कुछ कुंजियों के लिए प्रतीक्षा करने में रुचि रखते हैं, तो getchar का उपयोग न करने का कोई कारण नहीं है। लेकिन कभी-कभी उपयोगकर्ता को _getch और दोस्तों का उपयोग करने के लिए यह अधिक व्यावहारिक और सुविधाजनक है। हालांकि, उनको सी या सी ++ मानक द्वारा निर्दिष्ट नहीं किया गया है और इस प्रकार आपके कार्यक्रम की पोर्टेबिलिटी को सीमित कर देगा। यह याद रखना।

+0

असल में गेटचर और गेटच के बीच एक अंतर है। कुछ कुंजी दबाए जाने तक गेट ब्लॉक। प्रवेश तब तक getchar ब्लॉक दबाया जाता है। –

2

आपको इसकी आवश्यकता क्यों है? यदि आपको एक वर्ण को कैप्चर करने की आवश्यकता है तो getchar() का उपयोग क्यों न करें?

+9

getchar लाइन buffered है, इस प्रकार यह एक न्यूलाइन चरित्र के लिए इंतजार करेंगे। _getch() नहीं होगा, लेकिन तुरंत लौट आएगा। मैं उसे कभी-कभी समझ सकता हूं कि यह वास्तव में उपयोगी है (उदाहरण के लिए ज़ूम करने के लिए x दबाएं ")। –

+1

मुझे नहीं लगता कि इसमें बफरिंग के साथ कुछ भी करना है। getchar() एक समय में एक चरित्र में पढ़ता है। तब fgets और Xscanf() कार्यों की पूरी श्रृंखला है (हालांकि उपयोग करने में मुश्किल है)। लेकिन जैसा कि मैंने कहा, उचित संदर्भ के बिना कुछ सुझाव देना मुश्किल है, खासकर गैर-मानक विस्तार। – dirkgently

9

यदि आप सी ++ में हैं, तो क्यों printf और getch? इसके बजाय cout और cin.get का उपयोग करने पर विचार करें।

+0

मुझे यकीन है कि CIN/cing.get तीर कुंजियों के साथ जैसे काम करता है – tagoma

3

त्रुटि के अनुसार, नाम getch() को बहिष्कृत किया गया है (जैसा कि यह एक माइक्रोसॉफ़्ट-विशिष्ट एक्सटेंशन था), और _getch() इसके बजाए अनुशंसित है। मुझे यकीन नहीं है कि पॉसिक्स कहां आता है; POSIX getch() को परिभाषित नहीं करता है, लेकिन इसके बजाय getchar() को ISO C standard (पृष्ठ 2 9 8) से जोड़ा गया ड्राफ्ट, अंतिम मानक मुक्त नहीं है) शामिल है। समाधान सुझाए गए अनुसार किया जाएगा और _getch() का उपयोग करें, या मानक C getchar() का उपयोग करें।

+1

'getch' थोड़ा' getchar' के साथ क्या करना है नहीं कर रहा हूँ। इसके बजाय यह एक शंकु (और मैं भी श्राप मानता हूं) इंटरफ़ेस जिसका उद्देश्य बिना किसी बफरिंग/देरी के कीबोर्ड से एक वर्ण को इंटरैक्टिव रूप से पढ़ना है। –

+0

POSIX इस विशेष समारोह के मामले में यह में नहीं आता है, लेकिन * कार्यों कि अंडरस्कोर संस्करणों के पक्ष में पदावनत किया गया के सबसे * इस तरह के 'open' या' mkdir' के रूप में POSIX की तरह कार्य करता थे। मान लीजिए कि वे कुछ अपवादों के लिए एक अलग चेतावनी संदेश बनाने को परेशान नहीं करना चाहते थे। –

4

getch()

+2

क्या आप समझा सकते हैं कि पूछने वाले को दूसरे के बजाय एक का उपयोग क्यों करना चाहिए? समस्या को ठीक करना अच्छा है लेकिन समस्या को समझना और समाधान क्यों काम करता है बेहतर है। – MCeley

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