2010-03-04 5 views
5

Nie mogę użyć "długo długo"; z czego powinienem korzystać?W systemie Mac OS X w C++ na 64-bitowym procesorze istnieje typ 64-bitowy?

+2

Dlaczego nie możesz użyć 'long long'? Czy twój kompilator go nie obsługuje? –

+0

Jakiego kompilatora używasz? – Cameron

+3

Czy Darwin/MacOSX obsługują typedefs o stałej wielkości, takie jak int64_t? Jeśli tak, użyłbym tych. Szczegółowe informacje można znaleźć na stronie http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html. – Void

Odpowiedz

12

Zakładając Snow Leopard (Mac OS X 10.6.2 - Intel), "długa" jest 64-bitowa z domyślnym kompilatorem.

Podaj "g ++ -m64" i prawdopodobnie będzie to również 64-bitowy w starszych wersjach.

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

Testowane z:

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.

Kompilacja z GCC 4.7.1 na Mac OS X 10.7.5 z opcją -std=c99, wyjście z programu jest bardziej rozbudowana. Dzięki apalopohapa za wskazanie niedopatrzenia, którego brakowało w oryginale long long itp.

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

Dodatkowo, jeśli podłączysz , możesz użyć int64_t i uint64_t, które są wpisane w odpowiedni typ typu i wyraźnie określają, czego używasz. – bobDevil

+1

int64_t * at al * są w rzeczywistości w

+3

Poleganie na właśnie opublikowanym stole to zła rada. Jeśli chcesz 64 bity, użyj 'int64_t'. Jest standardowy z jakiegoś powodu. – asveikau

3

Dołącz <stdint.h> lub <inttypes.h> (późniejsza znajduje się na trochę więcej kompilatorów, ale oba są dostarczane przez kompilator Apple) i używać uint64_t i int64_t. Są 64-bitowe na 32- i 64-bitowych obiektach docelowych.

Powiązane problemy