2010-09-16 6 views
5

क्या कोई सी कंपाइलर है जो फ़ाइल के प्रकार या प्रोजेक्ट सेटिंग्स में उपयोगकर्ता द्वारा स्पष्ट रूप से उल्लिखित होने तक डिफ़ॉल्ट प्रकार का char को हस्ताक्षरित के रूप में लेता है?कोई भी कंपाइलर जो 'char' को 'unsigned' के रूप में लेता है?

/Kanu_

उत्तर

11

जीसीसी करता है। लेकिन केवल प्लेटफार्मों के लिए संकलन करते समय जहां एक हस्ताक्षरित चार सम्मेलन होता है, जिसमें एआरएम लिनक्स [*] शामिल है। जब जीसीसी x86 के लिए संकलित होता है, तो डिफ़ॉल्ट पर हस्ताक्षर किए जाने के लिए डिफ़ॉल्ट होता है।

[*] या कम से कम यह अतीत में रहा है। मुझे पता है कि लिनक्स ने एआरएम पर एक अलग डिफ़ॉल्ट एबीआई पर स्विच किया है।

अद्यतन '2013: एंड्रॉइड एनडीके के लिए एआरएम कंपाइलर्स (जीसीसी, क्लैंग) unsigned char पर डिफ़ॉल्ट। X86 और MIPS compilers signed char पर डिफ़ॉल्ट हैं।

2

आम तौर पर डिफ़ॉल्ट के रूप में स्थापित करने के लिए एक विकल्प है, लेकिन मेरी जानकारी के अनुसार कोई संकलक कि नहीं करता है।

+2

वहाँ है। एमएसवीसी में आप ['/ J' (डिफ़ॉल्ट चार प्रकार हस्ताक्षरित है) का उपयोग करते हैं] (https://msdn.microsoft.com/en-us/library/0d294k5z.aspx)। जीसीसी में आप ['-funsigned-char'] का उपयोग करते हैं (http://stackoverflow.com/a/20518559/995714) –

4

मानक के लिए मानक (एजेड, एजे, 0-9, मूल विराम चिह्न इत्यादि) द्वारा आवश्यक सभी वर्णों का पूर्णांक मान सकारात्मक होना चाहिए, इसलिए कोई भी सिस्टम एन्कोडिंग का उपयोग कर रहा है जहां इन वर्णों के मान बाहर हैं signed charकी सीमा में सादा char हस्ताक्षरित होना चाहिए। मेरा मानना ​​है कि इसका मतलब है कि सभी ईबीसीडीआईसी प्रणालियों में एक सादा char होना चाहिए जो हस्ताक्षरित है, लेकिन मुझे गलत हो सकता है।

+4

यदि' CHAR_BIT'> 8 'char' के मानों की श्रेणी -128 से अधिक है। 2727 या 0..255। तो, CHAR_BIT == 9 के साथ एक ईबीसीडीआईसी प्रणाली पर, एक सादे 'char' पर हस्ताक्षर किए जा सकते हैं। – pmg

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