IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Régles pour assurer la portabilité [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut Régles pour assurer la portabilité
    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

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    • 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.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Par défaut
    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

  4. #4
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Par défaut
    Citation Envoyé par jenova Voir le message
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 48
    Par défaut
    C'est vrai ^^'
    Pardon

    Bien pratique cette page tiens, hop marque-pages.

  6. #6
    Membre éclairé Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    Février 2004
    Messages
    557
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paaaaaa

    Informations forums :
    Inscription : Février 2004
    Messages : 557
    Par défaut
    Merci pour ces éléments de réponses.

  7. #7
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par jenova Voir le message
    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
    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

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par DaZumba Voir le message
    • 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.
    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

  9. #9
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Si tu n'y vois pas d'inconvénients, j'aimerais reprendre ces principes pour compléter un des articles de mon site.
    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...

  10. #10
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Si tu n'y vois pas d'inconvénients, j'aimerais reprendre ces principes pour compléter un des articles de mon site.
    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...)

Discussions similaires

  1. [DATES] Règles pour le numéro de la semaine
    Par kirgan dans le forum Access
    Réponses: 7
    Dernier message: 28/04/2006, 10h46
  2. [Info]Règles pour programmer proprement
    Par pingoui dans le forum Langage
    Réponses: 2
    Dernier message: 16/02/2006, 20h45
  3. Quel langage pour une meilleure portabilité Win/Linux
    Par darkervein dans le forum OpenGL
    Réponses: 3
    Dernier message: 22/04/2005, 15h59
  4. Règles pour les #include
    Par julian_ross dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo