2010-03-04 11 views
5

No puedo usar "long long"; ¿Qué debería estar usando?En Mac OS X en C++ en una CPU de 64 bits, ¿hay algún tipo de 64 bits?

+2

¿Por qué no puedes usar 'long long'? ¿Tu compilador no lo admite? –

+0

¿Qué compilador estás usando? – Cameron

+3

¿Darwin/MacOSX es compatible con los tipos enteros de tamaño fijo, como int64_t? Si es así, los usaría. Ver http://www.opengroup.org/onlinepubs/000095399/basedefs/stdint.h.html para más detalles. – Void

Respuesta

12

Asumiendo Snow Leopard (Mac OS X 10.6.2 - Intel), entonces 'largo' es de 64 bits con el compilador predeterminado.

Especifique 'g ++ -m64' y probablemente también sea de 64 bits en versiones anteriores.

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

probado con:

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.

compilación con GCC 4.7.1 en Mac OS X 10.7.5 con la opción -std=c99, la salida del programa es más extensa. Gracias a apalopohapa para señalar la omisión de que long long etc. faltaban en el original.

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

Además, si incluye , puede usar int64_t y uint64_t, que son typedef'd al tipo de tipo apropiado, y lo hace explícito con lo que está utilizando. – bobDevil

+1

int64_t * at al * en realidad están en

+3

Confiar en la tabla que acaba de publicar es un mal consejo. Si quiere 64 bits, use 'int64_t'. Es estándar por una razón. – asveikau

3

Incluir <stdint.h> o <inttypes.h> (la tarde se encuentra en algunos compiladores más, pero ambos son proporcionados por el compilador de Apple), y el uso uint64_t y int64_t. Son 64 bits tanto en objetivos de 32 bits como de 64 bits.

Cuestiones relacionadas