में लोकेल निर्भर हो सकता है सेटलोकेल को कवर करने वाले अनुभाग में, एएनएसआई सी मानक एक फुटनोट में बताता है कि केवल ctype.h फ़ंक्शंस जिनके व्यवहार वर्तमान लोकेल से प्रभावित नहीं हैं, isdigit और isxdigit हैं।वैध रूप से सी
isdigit का माइक्रोसॉफ्ट कार्यान्वयन लोकेल निर्भर है क्योंकि, उदाहरण के लिए, कोड पेज 1250 का उपयोग करने वाले लोकल में केवल 0x30 ('0') - 0x39 ('9') श्रेणी में वर्णों के लिए गैर-शून्य लौटाता है, जबकि कोड पेज 1252 isdigit का उपयोग करने वाले लोकेशंस सुपरस्क्रिप्ट अंक 0xB2 ('²'), 0xB3 ('³') और 0xB9 ('¹') के लिए गैर-शून्य भी लौटाते हैं।
माइक्रोसॉफ्ट आईडीजिट लोकेल निर्भर करते हुए सी मानक का उल्लंघन कर रहा है?
इस प्रश्न में मैं मुख्य रूप से सी 9 0 में रूचि रखता हूं, जो माइक्रोसॉफ्ट का दावा है कि सी 99 के बजाय।
अतिरिक्त पृष्ठभूमि: setlocale की
माइक्रोसॉफ्ट के स्वयं के प्रलेखन गलत तरीके से कहा गया है कि isdigit स्थान के LC_CTYPE भाग से अप्रभावित है।
इन कार्यों के व्यवहार वर्तमान स्थान से प्रभावित होता है:
सी मानक कि ctype.h कार्यों को शामिल किया गया की धारा कुछ शब्दों है कि मैं अस्पष्ट मानते हैं। उन कार्यों को में लोकेल-विशिष्ट पहलू केवल तभी होते हैं जब "सी" लोकेल में नहीं देखा जाता है।
मैं इस अस्पष्ट विचार करें क्योंकि यह स्पष्ट नहीं कि यह क्या इस तरह के isdigit के रूप में कार्य जिसके लिए वहाँ भाषा-विशिष्ट पहलुओं के बारे में कोई सूचना उपलब्ध नहीं के बारे में कहने की कोशिश कर रहा है। यह कहने की कोशिश कर रहा है कि ऐसे कार्यों को लोकेल आश्रित माना जाना चाहिए, इस मामले में माइक्रोसॉफ्ट के इडिजिट का कार्यान्वयन ठीक होगा। (सिवाय कि फुटनोट कि मैंने पहले बताया इस व्याख्या खंडन करने के लिए लगता है।)
+1 बहुत व्यावहारिक सोच के लिए :) –