में variadic मापदंडों एक चर तर्क समारोह ग पूर्णांक मानकों में कहा जाता है जब की बेहतर समझ के प्रकार को बढ़ावा देने के लिए int करने के लिए प्रोत्साहित कर रहे हैं और चल बिन्दु मापदंडोंग
दोगुना करने के बाद से प्रोटोटाइप प्रकार निर्दिष्ट नहीं करता प्रचारित किया जाता है वैकल्पिक तर्कों के लिए, एक भिन्न कार्य के लिए कॉल में डिफ़ॉल्ट तर्क प्रचार वैकल्पिक तर्क मानों पर किया जाता है। इसका अर्थ है
char
याshort int
(चाहे हस्ताक्षरित या नहीं) की वस्तुओं को उचित रूप सेint
याunsigned int
पर प्रचारित किया गया हो; औरfloat
प्रकार की वस्तुओं कोdouble
टाइप करने के लिए प्रचारित किया जाता है। इसलिए, यदि कॉलरchar
को वैकल्पिक तर्क के रूप में पास करता है, तो इसेint
पर प्रचारित किया जाता है, और फ़ंक्शनva_arg (ap, int)
के साथ इसका उपयोग कर सकता है।
int
प्रकार 64 बिट मशीनों पर 4 बाइट और 64 बिट मशीनों पर 8 बाइट होना चाहिए, क्या यह सही है?
तो मुझे आश्चर्य है कि जब मैं को %lld
प्रारूप के साथ printf जैसे एक चर तर्क तर्क फ़ंक्शन पर पास करता हूं तो क्या जोड़ता है।
और फिर, मुझे आश्चर्य है कि जब मैं long double
को %Lf
प्रारूप के साथ printf (32 या 64 बिट मशीनों पर कोई फर्क नहीं पड़ता) के साथ printf को पास करता हूं तो मुझे क्या आश्चर्य होता है।
#include <stdio.h>
int main(void)
{
printf("sizeof(int) %d\n", sizeof(int));
printf("sizeof(long int) %d\n", sizeof(long int));
printf("sizeof(long long int) %d\n", sizeof(long long int));
printf("%lld\n", 1LL<<33);
printf("sizeof(float) %d\n", sizeof(float));
printf("sizeof(double) %d\n", sizeof(double));
printf("sizeof(long double) %d\n", sizeof(long double));
return 0;
}
परिणाम है::
sizeof(int) 4
sizeof(long int) 4
sizeof(long long int) 8
8589934592
sizeof(float) 4
sizeof(double) 8
sizeof(long double) 12
यह मेरे लगता है कि नहीं सभी मापदंडों हैं बनाता है
[संपादित]
एक 32 बिट मशीन पर, मैं इस कोशिश की int
को पदोन्नत किया गया, अन्यथा मुझे 858 9934592 के बजाय 0 मुद्रित किया जाएगा।
शायद int
से कम केवल तर्क int
पर प्रचारित हैं। और कुछ ऐसा ही फ़्लोटिंग पॉइंट प्रकारों के लिए हो सकता है।
[संपादित]
एक 64 बिट मशीन परमैं चलाने इस:
int main(void)
{
printf("sizeof(int) %lu\n", sizeof(int));
printf("sizeof(long) %lu\n", sizeof(long));
printf("sizeof(long long) %lu\n", sizeof(long long));
return 0;
}
और
sizeof(int) 4
sizeof(long) 8
sizeof(long long) 8
मिल अगर मैं अच्छी तरह से मानक को समझते हैं, केवल char
और short
हैं int
को पदोन्नत किया गया। मुझे आश्चर्य है कि छोटे आर्किटेक्चर में क्या होता है, जैसे कि 16 बिट या 8 बिट एमसीयू। मुझे लगता है कि int
आकार आर्किटेक्चर द्वारा निर्भर है, लेकिन मुझे आश्चर्य है कि sizeof(int)
8 बिट आर्किटेक्चर पर 1 हो सकता है। short
int
के इस मामले को बढ़ावा देने में असंभव है जब तक कि कुछ बिट्स
'int' _at कम से कम 16 बिट्स होना चाहिए, लेकिन मानक द्वारा कोई और गारंटी नहीं दी जाती है। –
और 'लंबा लंबा' कम से कम 64 बिट प्रति सी 99 – 4386427
होना चाहिए [एक 'int'' छोटा 'होना शामिल होना चाहिए (http://port70.net/~nsz/c/c11/n1570.html# 6.2.5p8)। साथ ही, मानक निर्दिष्ट करता है कि अंतर्निहित वास्तुकला के बावजूद एक ['int 'कम से कम 16 बिट्स होना चाहिए) (http://port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1)। '_Bool' को 'int' में भी बढ़ावा दिया जाता है। –