2010-03-04 19 views
5

"Uzun süre" kullanamıyorum; ne kullanmalıyım?64 bit CPU üzerinde C++ Mac OS X'te 64 bitlik bir tür var mı?

+2

Neden uzun uzun kullanmıyorsunuz? Derleyiciniz desteklemiyor mu? –

+0

Hangi derleyiciyi kullanıyorsunuz? – Cameron

+3

Darwin/MacOSX, int64_t gibi sabit boyutlu tamsayı tiplerini destekliyor mu? Eğer öyleyse, bunları kullanırdım. Ayrıntılar için http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html adresini ziyaret edin. – Void

cevap

12

Snow Leopard (Mac OS X 10.6.2 - Intel) varsayarsak, 'uzun' varsayılan derleyici ile 64 bittir.

'g ++ -m64' belirtin ve büyük olasılıkla önceki sürümlerde 64 bit olacaktır.

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)) 

ile test edilmiştir:

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.
seçenek -std=c99 ile Mac OS X 10.7.5 üzerinde GCC 4.7.1 ile derleniyor, programdan çıkış daha geniş kapsamlıdır. apalopohapa'a, long long vb. Belgelerin orijinalinden eksik gözüktüğü için teşekkür ederiz.

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

Ayrıca, 'u eklediyseniz, int64_t ve uint64_t kullanabilirsiniz, bunlar uygun tipte yazılmıştır ve ne kullandığınızı açık hale getirir. – bobDevil

+1

int64_t * at al * aslında

+3

adresinde yer almaktadır. Gönderdiğiniz tabloya güvenmek kötü bir öneridir. 64 bit istiyorsanız, 'int64_t' kullanın. Bir sebepten dolayı standart. – asveikau

3

dahil <stdint.h> veya <inttypes.h> (bundan sonra daha fazla derleyici üzerinde bulunan, ancak hem Apple derleyici tarafından sağlanır) ve uint64_t ve int64_t kullanın. Hem 32 bit hem de 64 bit hedeflerde 64 bit.

İlgili konular