Bonjour,
Je souhaiterai savoir quelles sont les régles à respecter lors du développement afin d'assurer la portabilité d'un programme C sous différents O.S ainsi que les pièges à éviter.
Merci
Bonjour,
Je souhaiterai savoir quelles sont les régles à respecter lors du développement afin d'assurer la portabilité d'un programme C sous différents O.S ainsi que les pièges à éviter.
Merci








- Utiliser les fonctions de la bibliotheque standard au maximum (attention, les arguments de certaines fonctions standards dependent du systeme. C'est le cas de system(), evidemment !);
- Ne pas faire d'hypothese sur la taille des types et des pointeurs;
- Ne pas faire d'hypothese sur l'endianness de la machine;
- Ne pas faire d'hypothese sur le jeu de caractere utilise;
- Ne pas faire d'hypothese sur la maniere dont les operations a virgule flottantes sont gerees par la machine (notamment dans l'utilisation de float ou double dans les tests);
- Ne pas utiliser les extensions au langage offertes par un compilateur.
J'en oublie certainement...
Beaucoup de choses ne peuvent pas etre faites de maniere portables. Il faut alors isoler les fonctions non-portables du systeme et les re-ecrire pour chaque plateforme, ou utiliser des APIs (comme POSIX) et bibliotheques portables qui offrent un niveau d'abstraction supplementaire.
Puis dans les cas où tu n'as pas le choix tu utilises les preprocesseurs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #ifdef __WINDOWS__ //code.. #elif __LINUX__ //code.. #elif __MAC_OS__ //code.. #endif
Avec les bonnes macro c'est mieux : http://predef.sourceforge.net/preos.html![]()
C'est vrai ^^'
Pardon
Bien pratique cette page tiens, hop marque-pages.
OK (avec les bonnes macros), mais uniquement dans les parties 'non portables' ou dans des headers (macros d'abstraction...). Jamais en vrac dans l'application.
http://emmanuel-delahaye.developpez....s.htm#standard
Si tu n'y vois pas d'inconvénients, j'aimerais reprendre ces principes pour compléter un des articles de mon site.
EDIT :
Voici ma synthèse :
http://delahaye.emmanuel.free.fr/spip.php?article5








Bien sur ! Note que le C99 tente de standardiser un peu l'usage des flottants (annexe F) donc leur portabilite est amelioree (evidemment, cela depend du support offert par le compilateur). Par contre, les enumerations sont moins portables qu'elles en ont l'air, puisque le standard est assez flou quant a leur type...
Egalement, j'ajouterai dans la liste #pragma, qui est par definition non portable a l'exception des valeurs STDC (FP_CONTRACT, FENV_ACCESS et CX_LIMITED_RANGE) en C99.
Evidemment, si tu veux completer la liste, n'hesite pas ! Je ne suis pas sur qu'elle soit exhaustive...








Ah tiens, pendant que j'y pense, j'ai oublie un point:
- N'utiliser pour valeur de retour de main() que 0, EXIT_SUCCESS, ou EXIT_FAILURE.
(sous VMS, une valeur de retour impaire est synonyme de succes, alors qu'une valeur paire indique un echec, mais la bibliotheque C (ou plutot le runtime C) transforme un return 0 en un statut egal a 1. Pourquoi faire simple...)
Partager