Question

J'ai une application C ++ qui utilise wxWidgets. Certaines parties de l'application diffèrent pour les hôtes 32 et 64 bits. Actuellement, j'utilise sizeof (void *), mais est-il une meilleure façon qui utilise la compilation conditionnelle et la plate-forme neutre?

Était-ce utile?

La solution

Généralement les gens utilisent #defines pour déterminer bitness (le define exact dépendra du compilateur). Cela vaut mieux qu'une approche d'exécution en utilisant sizeof (void *).

En ce qui concerne la plate-forme neutre, bien, certains compilateurs sont sur plusieurs plates-formes ..

Autres conseils

En fonction de votre compilateur vous pouvez avoir accès à la plate-forme de macros spécifiques. Essayez de regarder leur documentation.

Tous les compilateurs communes ont des macros prédéfinies préprocesseur qui identifient la plate-forme. Par exemple, si vous utilisez GCC, vous pouvez les consulter tous facilement:

touch foo.h; g++ -E -dM foo.h

ce qui donne entre autres

#define linux 1
#define __x86_64 1

pour moi, puisque je suis sur un linux 64b pour le moment, et

#define __APPLE__ 1
#define __i386 1

sur un 32b OS X, je l'entends.

Pour Sun Studio 12, ils sont documentés . En outre, Sun Microsystems les considère dans le cadre de l'API du compilateur si la compatibilité est assurée. Par exemple, sur ma boîte de Solaris, je __SunOS_5_10 et __sparcv9 défini (ce qui implique 64b).

Sur les systèmes AIX avec le compilateur xlc IBM, jetez un oeil à /etc/vac.cfg et ses champs de mot-clé options pour trouver les macros prédéfinies. Il y a au moins _AIX et _AIX61 plus spécifique, ainsi que _POWER (sur un PPC 64b) défini sur un système où j'ai accès.

Le HP-UX et son compilateur aCC, il y a au moins la macro __ia64 sur itanium. D'autres macros prédéfinies spécifiques sont documentées .

Quel est le problème avec l'utilisation sizeof() où les questions de taille? Le compilateur optimisera heureusement il loin à une constante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top