वर्ण और पूर्णांकों बल्कि कसकर सी
में बुनी कर रहे हैं आप एक इनपुट स्ट्रीम से एक चरित्र प्राप्त करते हैं, यह हर एक चरित्र प्लस अंत फ़ाइल प्रतीक को प्रदर्शित करने में सक्षम होना चाहिए।
इसका मतलब है कि एक char
प्रकार काफी बड़ा नहीं होगा तो वे एक व्यापक प्रकार का उपयोग करें।
C99 औचित्य दस्तावेज़ कहता है:
इन कार्यों के बाद से अक्सर, उनके डोमेन छोटे धनात्मक पूर्णांक के लिए प्रतिबंधित है EOF का मूल्य मुख्य रूप से मैक्रो के रूप में इस्तेमाल एक अहस्ताक्षरित चार में प्रदर्शनीय, प्लस कर रहे हैं। ईओएफ पारंपरिक रूप से -1 है, लेकिन यह कोई नकारात्मक पूर्णांक हो सकता है, और इसलिए किसी भी वैध चरित्र कोड से अलग है। इस प्रकार मैक्रोज़ को विशेष रूप से गुणों के एक छोटे सरणी में इंडेक्स के रूप में तर्क का उपयोग करके कार्यान्वित किया जा सकता है।
मानक ही इस में क्या कहना है:
हैडर <ctype.h>
वर्गीकृत करने और मानचित्रण पात्रों के लिए उपयोगी कई कार्य की घोषणा की। सभी मामलों में तर्क एक int है, जिसका मान एक हस्ताक्षरित चार के रूप में प्रतिनिधित्व योग्य होगा या मैक्रो ईओएफ के मान के बराबर होगा। यदि तर्क का कोई अन्य मूल्य है, तो व्यवहार अपरिभाषित है।
मुझे लगता है इस सवाल का जवाब [यहां] दिए गए एक (http://stackoverflow.com/questions/433895/why-are-c-character-literals-ints-instead-of-chars) के समान है। सी में, चरित्र अक्षर 'int' प्रकार के होते हैं। –
@ कोडी: दो निर्णय संबंधित हो सकते हैं, जिसमें सी में वर्णों पर "गणना" करने के लिए सही डेटाटाइप 'int' है। लेकिन इन कार्यों के पैरामीटर के समान अक्षर वाले अक्षर जितना आसान दिखते हैं उतना आसान नहीं है। आप 'इस्लामम (' ए ') लिख सकते हैं, लेकिन आपको' इस्लामम (CHAR_MIN) 'लिखने में सक्षम होने की गारंटी नहीं है, या आपके कार्यान्वयन में जो भी वर्ण शाब्दिक' CHAR_MIN' से मेल खाता है, क्योंकि यह नकारात्मक हो सकता है।इन कार्यों के साथ ठीक से मिलान करने के लिए, चरित्र अक्षर को वास्तव में 'हस्ताक्षरित' प्रकार की आवश्यकता होगी, लेकिन फिर उन्हें 'char' पर कास्टिंग करना संभवतः खराब होगा। –