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 :

Code Portable


Sujet :

C

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut Code Portable
    Je developpe du code C qui doit tourner sur au moins deux architectures differentes:
    - sparc/Solaris
    - x86/Linux

    Pour les problemes d'endian, j'ai recours a des macros du style
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    #if __BYTE_ORDER == __LITTLE_ENDIAN...
       [...]
    #else ...
    Cependant, sur sparc __BYTE_ORDER n'est defini nulle part.

    Je voulais donc savoir, s'il existait un "standard" ou du moins un truc
    assez respecter, qui puisse me dire sur quelle machine/architecture
    je suis, genre :
    Dans ce cas ou trouver les differents types existants...

    Si quelqu'un a deja rencontre et contourne ce probleme ce serait cool...
    (ou si quelqu'un a des idees)

  2. #2
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Il existe un test pour connaitre la plate forme :

    #if defined(linux) : linux
    #if defined(_Windows) : Windows
    #if defined(__MSDOS__) : DOS

    Le probleme c'est que ca differencie l'OS et non la palte forme (dont depend l'endianness). De plus j'ignore le defined correspond a Solaris.

    Sinon pour svoir le type d'endianness, enregistre dans un fichier un int de valeur 1, puis lis le caracteres, si il faut 0x01 les poids faible sont en tete, si il vaut 0x00, les poids forts sont en tete. Attention toutefois cette methode fais certaines supposition en partculiers sur la taille des types et sur l'ordre des bits dans un octet, elle n'est pas totalement portable mais devrait fonctionner sur les architectures qui t'interessent.

    Pour les d�tails, lis les cours et tutoriels pour bien apprendre le langage C : http://c.developpez.com/cours/

  3. #3
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    En fait je voulais savoir ou ces parametres etaient definis : linux, _Windows, __MSDOS__, etc, pour pouvoir trouver le bon pour sparc.
    Est-ce qu'il sont definis par le compilateur ou dans un .h

    Mais c'est vrai que si y'a pas de vraie methode propre qui marche a tous les coups, j'utiliserais la methode dynamique.

    Rq: pour les types, en fait sont definis dans inttypes.h les variables :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    int16_t, uint16_t ... int64_t, uint64_t
    C'est pratique pour etre sur des types sur lequels on travaille.

  4. #4
    Membre Expert

    Homme Profil pro
    Urbaniste
    Inscrit en
    Mars 2002
    Messages
    255
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 55
    Localisation : France, Aveyron (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Urbaniste

    Informations forums :
    Inscription : Mars 2002
    Messages : 255
    Par d�faut
    Le mieux c'est de mettre les endians dans un fichier � part (Endian.h par ex) que tu vas g�n�rer AVANT la compilation par un programme/script (comme automake/autogen ou autre).

    @+ Haypo

  5. #5
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Sous Borland _Windows_ est defini dans windows.h, donc sous solaris c'est pa gagner pour trouver le correspondant. De plus si tu utilise cette methode du nom tu vas avoir des problemes avec Solaris sous x86 et Linux sous Sparc.

    La methode d'Haypo me semble etre preferable et tres facilement extensible a d'autre plateforme

  6. #6
    Membre �m�rite
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Par d�faut
    bah fais des
    __sparc__
    ca marche bien.
    sinon y a __alpha__, ...

  7. #7
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    Merci ! Je vais finalement faire un mix d'un peu tout : generation conditionnelle + detection dynamique.

    Finalement, apres maintes recherches et mot cles essayes sous google, j'ai trouve :
    http://predef.sourceforge.net/
    ou tous les types sont definis.

  8. #8
    gl
    gl est d�connect�
    R�dacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 46
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par d�faut
    Tres interessant cette page

  9. #9
    Membre �m�rite
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Par d�faut
    Citation Envoy� par gl
    Tres interessant cette page
    Oui, mais j'ai l'impression que ce n'est pas tout a fait, tout a fait vrai:
    je ne sais plus quel gcc j'ai d'installe, mais la macro C99 (ou le truc qui dit que c'est C99 compliant) n'est pas defini alors que __USE_ISOC99__ l'est, et cela correspond au meme

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    19
    D�tails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Par d�faut
    salut

    un de mes amis a deja fais un programme portable solaris/linux, et il a utiliser les ./configure. il ma donne un tutorial sur comment faire, mais je n'ai pas eu le temp de lire. si ca peut t'aider.

    http://www.cnedra.org/doc/form_autoconf.html#intro

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Comment rendre un code portable ?
    Par kalkuta dans le forum jQuery
    R�ponses: 2
    Dernier message: 25/02/2009, 02h23
  2. DLL C++ - Code portable
    Par etranger dans le forum C++
    R�ponses: 4
    Dernier message: 20/10/2007, 17h26
  3. Utilisation de 'cout' et code portable ??
    Par LaVaZza dans le forum SL & STL
    R�ponses: 3
    Dernier message: 05/12/2005, 19h05
  4. Code portable pour ping
    Par SteelBox dans le forum C
    R�ponses: 4
    Dernier message: 03/11/2005, 22h56
  5. [Hardware portable] Comment entrer un code Ascii?
    Par l.sage dans le forum Ordinateurs
    R�ponses: 13
    Dernier message: 11/08/2005, 13h04

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