2010-03-04 5 views
5

मैं "लंबे समय तक" उपयोग नहीं कर सकता; मुझे क्या उपयोग करना चाहिए?64-बिट CPU पर सी ++ में मैक ओएस एक्स पर, क्या 64 बिट्स का एक प्रकार है?

+2

आप 'लंबे समय तक क्यों नहीं उपयोग कर सकते हैं? क्या आपका कंपाइलर इसका समर्थन नहीं करता है? –

+0

आप किस कंपाइलर का उपयोग कर रहे हैं? – Cameron

+3

क्या डार्विन/मैकोज़क्स निश्चित आकार पूर्णांक टाइपिफ़ीफ का समर्थन करता है, जैसे int64_t? यदि ऐसा है, तो मैं उन का उपयोग करूंगा। विवरण के लिए http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html देखें। – Void

उत्तर

12

हिम तेंदुए (मैक ओएस एक्स 10.6.2 - इंटेल) मानते हैं, तो 'लंबा' डिफ़ॉल्ट कंपाइलर के साथ 64-बिट्स है।

'g ++ -m64' निर्दिष्ट करें और यह पिछले संस्करणों पर भी 64-बिट्स होगा।

1 = sizeof(char) 
1 = sizeof(unsigned char) 
2 = sizeof(short) 
2 = sizeof(unsigned short) 
4 = sizeof(int) 
4 = sizeof(unsigned int) 
8 = sizeof(long) 
8 = sizeof(unsigned long) 
4 = sizeof(float) 
8 = sizeof(double) 
16 = sizeof(long double) 
8 = sizeof(size_t) 
8 = sizeof(ptrdiff_t) 
8 = sizeof(time_t) 
8 = sizeof(void *) 
8 = sizeof(char *) 
8 = sizeof(short *) 
8 = sizeof(int *) 
8 = sizeof(long *) 
8 = sizeof(float *) 
8 = sizeof(double *) 
8 = sizeof(int (*)(void)) 
8 = sizeof(double (*)(void)) 
8 = sizeof(char *(*)(void)) 

साथ परीक्षण किया गया:

i686-apple-darwin10-g++-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5646) (dot 1) 
Copyright (C) 2007 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

विकल्प -std=c99 साथ मैक ओएस एक्स 10.7.5 पर जीसीसी 4.7.1 के साथ संकलन, कार्यक्रम से उत्पादन अधिक व्यापक है। apalopohapa पर long long आदि की निगरानी को इंगित करने के लिए धन्यवाद मूल से गायब था।

1 = sizeof(char) 
1 = sizeof(unsigned char) 
2 = sizeof(short) 
2 = sizeof(unsigned short) 
4 = sizeof(int) 
4 = sizeof(unsigned int) 
8 = sizeof(long) 
8 = sizeof(unsigned long) 
4 = sizeof(float) 
8 = sizeof(double) 
16 = sizeof(long double) 
8 = sizeof(size_t) 
8 = sizeof(ptrdiff_t) 
8 = sizeof(time_t) 
8 = sizeof(long long) 
8 = sizeof(unsigned long long) 
8 = sizeof(uintmax_t) 
1 = sizeof(int8_t) 
2 = sizeof(int16_t) 
4 = sizeof(int32_t) 
8 = sizeof(int64_t) 
1 = sizeof(int_least8_t) 
2 = sizeof(int_least16_t) 
4 = sizeof(int_least32_t) 
8 = sizeof(int_least64_t) 
1 = sizeof(int_fast8_t) 
2 = sizeof(int_fast16_t) 
4 = sizeof(int_fast32_t) 
8 = sizeof(int_fast64_t) 
8 = sizeof(uintptr_t) 
8 = sizeof(void *) 
8 = sizeof(char *) 
8 = sizeof(short *) 
8 = sizeof(int *) 
8 = sizeof(long *) 
8 = sizeof(float *) 
8 = sizeof(double *) 
8 = sizeof(int (*)(void)) 
8 = sizeof(double (*)(void)) 
8 = sizeof(char *(*)(void)) 
1 = sizeof(struct { char a; }) 
2 = sizeof(struct { short a; }) 
4 = sizeof(struct { int a; }) 
8 = sizeof(struct { long a; }) 
4 = sizeof(struct { float a; }) 
8 = sizeof(struct { double a; }) 
16 = sizeof(struct { char a; double b; }) 
16 = sizeof(struct { short a; double b; }) 
16 = sizeof(struct { long a; double b; }) 
4 = sizeof(struct { char a; char b; short c; }) 
16 = sizeof(struct { char a; char b; long c; }) 
4 = sizeof(struct { short a; short b; }) 
6 = sizeof(struct { char a[3]; char b[3]; }) 
8 = sizeof(struct { char a[3]; char b[3]; short c; }) 
16 = sizeof(struct { long double a; }) 
32 = sizeof(struct { char a; long double b; }) 
16 = sizeof(struct { char a; long long b; }) 
16 = sizeof(struct { char a; uintmax_t b; }) 
+4

इसके अतिरिक्त, यदि आप शामिल करते हैं, तो आप int64_t, और uint64_t का उपयोग कर सकते हैं, जो उचित प्रकार के टाइप टाइप किए गए हैं, और यह स्पष्ट करता है कि आप क्या उपयोग कर रहे हैं। – bobDevil

+1

int64_t * अल * पर वास्तव में

+3

आपके द्वारा पोस्ट की गई तालिका पर निर्भर करना खराब सलाह है। यदि आप 64 बिट्स चाहते हैं, तो 'int64_t' का उपयोग करें। यह एक कारण के लिए मानक है। – asveikau

3

शामिल <stdint.h> या <inttypes.h> (बाद में कुछ और compilers पर पाया जाता है, लेकिन दोनों एप्पल संकलक द्वारा प्रदान की जाती हैं), और uint64_t और int64_t का उपयोग करें। वे 32-बिट और 64-बिट दोनों लक्ष्यों पर 64-बिट हैं।

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