2009-11-18 9 views
8

Cuando se ejecuta en Leopard que puede hacer algo como:__LP64__ en OS X -> Snow Leopard Equivalente?

#if __LP64__ 
    #pragma message ("64 bit Leopard issue") 
#endif 

Lo que es Snow Leopard y Snow Leopard 64

y (más importante)

¿Dónde me he encontrado esta respuesta yo mismo y no ¿Tuve que preguntar?

Respuesta

7

__LP64__ es una macro del preprocesador de gcc que es distinta de cero cada vez que está compilando el modelo de datos de 64 bits, independientemente de la versión de OS X que esté creando. Otra macro que será distinto de cero es __x86_64__ en la construcción para los procesadores Intel de 64 bits. Puede encontrar más información sobre estas y otras macros en developer.apple.com.

Se puede especificar un destino de despliegue para su proyecto XCode, que especificará la versión del sistema operativo mínimo permisible en el que su aplicación puede funcionar. Puede aprovechar esta configuración en su código para activar/desactivar condicionalmente partes de ella; ver this mailing list post para más información.

+0

También: [los documentos de GCC] (http://gcc.gnu.org/onlinedocs/gcc-3.4.6/cpp/Common-Predefined-Macros.html) – Chuck

+0

@fbrereto - así que debería usar 'si X86_64 'para cosas de 64 bits y luego de forma predeterminada a las cosas de 32 bits si ahora? ¿LP_64 o X86_64 también funcionan en procesadores Windows y AMD (mi aplicación se construye para ambos). Y si es así, necesitaría algo como 'si X86_4' y dentro si Apple o WIN32 ... ¿estoy pensando correctamente? –

+0

@fibrereto - que se parece a mí _WIN32 y _WIN64 y para Apple __APPLE__ –

12

__LP64__ no es una abreviatura de "64 Leopard". Significa "longs y punteros son 64 bits". Está configurado en SnowLeopard exactamente en las mismas circunstancias que en Leopard.

__LP64__ no tendrá el mismo comportamiento en windows, porque Windows usa un modelo diferente de 64 bits, en el que las longitudes no tienen 64 bits de ancho. En cambio, en ventanas de 64 bits, la longitud es de 32 bits de ancho y longitudes largas y los punteros tienen 64 bits de ancho. Esto se conoce comúnmente como el modelo "llp64".

+0

@Stephen, Así que me gustaría hacer __LP_64__ para OS X y Linux y es allí un __ILP_64__ para Windows? –

+0

No estoy familiarizado con el entorno de compilación de Windows; con suerte, alguien más puede decirle qué símbolo de preprocesador usar. Sin embargo, si Windows tuviera una macro así, sería '__LLP64__'. –

+0

[comparación útil de mnemónicos modelo 64 bits en wikipedia] (http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models) – t0rst

Cuestiones relacionadas