2009-11-18 3 views
8

Lors de l'exécution sur Leopard vous pouvez faire quelque chose comme:__LP64__ sur OS X -> Equivalent Snow Leopard?

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

Qu'est-ce que Snow Leopard et Snow Leopard 64

ET (le plus important)

Où aurais-je trouvé cette réponse moi-même et non a dû demander?

Répondre

7

__LP64__ est une macro de préprocesseur gcc qui n'est pas nulle lorsque vous créez le modèle de données 64 bits, quelle que soit la version d'OS X sur laquelle vous construisez. Une autre macro qui sera non nulle est __x86_64__ lors de la construction de processeurs Intel 64 bits. Vous pouvez trouver plus d'informations sur ces macros et d'autres au developer.apple.com.

Vous pouvez spécifier une cible de déploiement pour votre projet XCode, qui spécifiera la version de système d'exploitation minimale autorisée sur laquelle votre application peut s'exécuter. Vous pouvez tirer parti de ce paramètre dans votre code pour activer/désactiver certaines parties de manière conditionnelle; Voir this mailing list post pour plus d'informations.

+0

Aussi: [les docs du GCC] (http://gcc.gnu.org/onlinedocs/gcc-3.4.6/cpp/Common-Predefined-Macros.html) – Chuck

+0

@fbrereto - donc devrais-je utiliser 'si X86_64 'pour les choses 64 bits, puis par défaut à la substance 32 bits si maintenant? Est-ce que LP_64 ou X86_64 fonctionne aussi sur les processeurs Windows et AMD (mon application est construite pour les deux). Et si oui alors j'aurais besoin de quelque chose comme 'si X86_4' et à l'intérieur si Apple ou WIN32 ... je pense bien? –

+0

@fibrereto - Qui me semble _WIN32 et _WIN64 et pour Apple __APPLE__ –

12

__LP64__ n'est pas une abréviation de "Leopard 64". Il signifie "longs et pointeurs sont 64 bits". Il est défini sur SnowLeopard exactement dans les mêmes circonstances que sur Leopard.

__LP64____LP64__ n'aura pas le même comportement sur Windows, car Windows utilise un modèle 64 bits différent, dans lequel les longs n'ont pas une largeur de 64 bits. Au lieu de cela, dans les fenêtres de 64 bits, la longueur est longue de 32 bits et la longueur des longs et des pointeurs est de 64 bits. Ceci est communément appelé le modèle "llp64".

+0

@Stephen, Donc je ferais __LP_64__ pour OS X et Linux et y a-t-il un __ILP_64__ pour Windows? –

+0

Je ne suis pas familier avec l'environnement de construction de Windows; J'espère que quelqu'un d'autre peut vous dire quel symbole de préprocesseur utiliser. Cependant, si Windows avait une macro comme ça, ce serait '__LLP64__'. –

+0

[Comparaison utile des mnémoniques du modèle 64 bits sur wikipedia] (http://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models) – t0rst