7
votes

Plate-forme C Préprocesseur Définitions

J'écris une petite bibliothèque en C ++ que j'ai besoin de pouvoir construire des plates-formes différentes, y compris iPhone, Windows, Linux, Mac et Symbian S60. J'ai écrit la plupart du code de sorte qu'il s'agisse de la plateforme-agnostique, mais il y a des portions qui doivent être écrites sur une base de plate-forme.

Actuellement, je l'accomplirais en incluant une en-tête différente selon la plate-forme actuelle, mais j'ai du mal à la déplaçant cela parce que je ne sais pas quelles définitions de préprocesseur sont définies pour toutes les plateformes. Pour Windows, je peux généralement compter sur voir Win32 ou _Win32. Pour Linux, je peux compter sur voir _unix_ mais je suis moins sûr des autres plates-formes ou de leurs variantes de 64 bits. Est-ce que quelqu'un a une liste des différentes définitions trouvées sur les plates-formes ou devrai-je recourir à un fichier de configuration ou à un paramètre GCC?


0 commentaires

5 Réponses :


0
votes

Ni les normes C ni les normes C ++ ne définissent de tels symboles, vous allez donc être à la merci de des implémentations spécifiques C ou C ++. Une liste de symboles couramment utilisés serait une chose utile à avoir, mais malheureusement, je n'ai pas une.


0 commentaires

0
votes

Je ne pense pas qu'il existe une liste universelle de la plate-forme définit à en juger par le fait que chaque bibliothèque de plate-forme croisée que j'ai vue a une configuration ad-hoc est pleine de ces choses. Mais vous pouvez envisager de regarder ceux utilisés par des bibliothèques assez portables comme libpng, zlib, etc.

Voici celui-ci utilisé par libpng


0 commentaires

1
votes

Les définitions vont être purement à la hauteur de votre fournisseur de compilateur. Si vous utilisez le même compilateur (disons, GCC) sur toutes vos plateformes, vous aurez un peu plus facile de cela.

Vous voudrez peut-être également essayer de organiser votre projet de manière à ce que la plupart des fichiers .h ne soient pas dépendants de la plate-forme. Diviser votre implémentation (fichiers du CPP) en fichiers distincts; un pour les trucs non spécifiques et un pour chaque plate-forme. Les plate-forme spécifiques peuvent inclure des en-têtes «privés» qui n'ont aucun sens pour cette plate-forme. Vous devrez peut-être effectuer des fonctions d'adaptateur pour obtenir quelque chose comme ceci pour travailler 100% (lorsque le système Libs prend des arguments légèrement différents), mais j'ai trouvé que cela soit vraiment utile à la fin, et apporter une nouvelle plate-forme est beaucoup plus facile. à l'avenir.


0 commentaires

9
votes

J'ai Ce pré-compilateur Sourceforge page dans mes favoris.


1 commentaires

J'ai édité votre lien pour indiquer la nouvelle version Wiki-ized, qui est beaucoup plus à jour, bien que Google pointe toujours sur l'ancienne version.



0
votes

Si vous souhaitez rechercher les symboles de préprocesseur par défaut pour un système donné sur lequel vous avez GCC (par exemple, Mac OS X, IOS, Linux), vous pouvez obtenir une liste complète à partir de la ligne de commande ainsi:

#include <TargetConditionals.h>


1 commentaires

Bien que la sortie de Vérification -DM puisse aider, il ne peut garantir autant d'informations que la page Wiki de Predef Sourceforge.