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 :

declaration de type dependant de la plate forme


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut declaration de type dependant de la plate forme
    Bonjour,

    J'aimerais définir un type qui fait 32 bits sur une machine 32bits ou un type qui fait 64 bits si la machine est une 64 bits.

    Je sais que cela doit se faire au niveau de la pre-compilation mais je sais pas trop comment l'ecrire ou en tout cas dans quel variable je peux savoir si c'est une 32 bits ou 64 bits.



    Je pense faire quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     #if
    #define SIZE
     
    #else
    #define SIZE
     
    #endif
    Mais quoi mettre au niveau du test et apres les SIZE.

    Merci par avance.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Sous Windows, tu as la macro WIN64 qui est définie en 64 bits, mais j'ignore s'il y a quoi que ce soit de standard.

    Par contre, tu peux faire un truc du genre assertion lors de la compilation (compile-time assert) avec un typedef de tableau et quelques sizeof. Ça ne permettra pas de définir la macro automatiquement, mais ça pourra détecter qu'elle est mal définie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #if ARCH_64_BITS
    	typedef unsigned long long SIZE;
    #else
    	/*Ici, on profite des avantages de Visual si on compile dessus*/
    	#ifdef _MSC_VER
    	typedef _W64 unsigned int SIZE;
    	#else
    	typedef unsigned int SIZE;
    	#endif
    #endif
    typedef char check_size_of_size[ (sizeof(SIZE)==sizeof(void*) ? 1 : -1) ];
    La dernière ligne fait la vérification: Si la taille de SIZE n'est pas celle d'un pointeur, le typedef sera déclaré avec une taille -1 et la compilation foirera.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut
    c'est exactement ca que je souhaite faire..... mais sous linux....

    Je te remercie de ta reponse et vais essayer de voir si cette variable est aussi sous unix

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut
    Comme on pouvait se doutait ca ne marche pas, snif snif....



    merci par avance de votre aide...

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    tu peux toujours faire une petite macro suivant la valeur de INT_MAX ou SHRT_MAX (dans limits.h si je ne m'abuse)

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    'marchera pas sous Win64, qui suit un modèle LLP64 et non pas ILP64 ou LP64...

    Et comme on ne peut pas faire de comparaison sur sizeof dans le préprocesseur...

    Edit: C'est toi qui avais raison, on peut utiliser SIZE_MAX, la limite d'un size_t...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par barbsbou Voir le message
    J'aimerais définir un type qui fait 32 bits sur une machine 32bits ou un type qui fait 64 bits si la machine est une 64 bits..
    Il faudrait définir précisément ce que tu appelles "machine 32 bits" et "machine 64 bits".

    Il y a beaucoup de choses dont on pourrait tenir compte : la taille des registres d'usage général (s'il y en a), la taille des registres d'adresse (s'il y en a), la taille des registres de donnée, la taille sur laquelle travaille l'UAL (les opérandes traitées au niveau matériel), la largeur du bus de donnée, la largeur du bus d'adresses...

    La notion de "processeur x bits" n'est pas du tout univoque, et, à mon avis, c'est surtout un slogan commercial.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut
    J'aimerais bien repondre a ta question precisement, mais je crois que ca depasse largement mes competences... je ne suis qu'un simple petit mathématicien qui souhaite implémenter en C quelques algo et les tester...

    Mon entreprise me prete une station dite de 32bits, et le projet que je fait ca sera pour tourner sur une machine dite 64 bit dont jy ai acces par ssh...

    par contre si tu me dit ou je peux trouver les info (sous linux) je vous les donne sans probleme


    Merci par avance

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par barbsbou Voir le message
    J'aimerais bien repondre a ta question precisement, mais je crois que ca depasse largement mes competences... je ne suis qu'un simple petit mathématicien qui souhaite implémenter en C quelques algo et les tester...
    La question, en fait, t'es adressée : pourquoi as-tu besoin d'un type dépendant de la machine?

  10. #10
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par corrector Voir le message
    La notion de "processeur x bits" n'est pas du tout univoque, et, à mon avis, c'est surtout un slogan commercial.
    La notion admise par les gens qui font de l'architecture, c'est la taille des registres entiers.
    Mais le marketing intervient parfois pour embrouiller les choses. Voir http://www.pdc.kth.se/~pek/bittedness.Mashery.txt par exemple.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 439
    Par défaut
    Citation Envoyé par Jean-Marc.Bourguet Voir le message
    La notion admise par les gens qui font de l'architecture, c'est la taille des registres entiers.
    1) Je préfère quand même dire que c'est équivoque : comment savoir si je parle à quelqu'un qui fait de l'architecture? (Je n'y connais moi-même pas grand chose.)

    En plus je trouve que c'est mieux d'être explicite sur ses hypothèses.

    2) Je n'ai mentionné la taille du bus qu'à titre humoristique, je n'envisage pas sérieusement qu'on utilise une caractéristique qui n'est pas visible par le programmeur (le 68000 un processeur 16 bits??!).

  12. #12
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    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 barbsbou Voir le message
    J'aimerais définir un type qui fait 32 bits sur une machine 32bits ou un type qui fait 64 bits si la machine est une 64 bits.
    Si tu es en C99 et que la machine le permet, tu peux utiliser les types uint32_t et uint64_t (<stdint.h> ou <inttypes.h>).

    Mais je ne suis pas sûr que tu ais besoin de ça. Il se peut qu'il suffise que tu utilises le type long...

    Quel est la vraie question ? Quel problème cherches-tu à résoudre ?

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 67
    Par défaut
    Tout d'abord merci pour vos reponses.

    Mon probleme plus exactement est que je dois faire un programme qui doit s'executer sur une machine "32 bits" et une machine "64 bits". Et selon sur quelle machine je travaille je dois definir un type qu'on va appeler par exemple "taille" et qui soit de meme nombre de bit que la machine... c-a-d que taille doit etre un type de 32 bit sur la machine 32 et 64 bits sur la machine 64.

    Du coup je comptais faire ca au niveau de la pre-compilation c'est a dire a coup de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #if (je sais pas quoi)
    /* je suis sur une machine 64*/
    typedef unsigned long int taille;
    #else
    /* je suis sur une machine 32*/
    typedef unsigned int taille
    #endif
    et je voudrais savoir quoi mettre a la place du test "(je ne sais pas quoi)".

    A moins que vous avez une autre alternative a proposer...???


    Merci par avance

  14. #14
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par barbsbou Voir le message
    Mon probleme plus exactement est que je dois faire un programme qui doit s'executer sur une machine "32 bits" et une machine "64 bits". Et selon sur quelle machine je travaille je dois definir un type qu'on va appeler par exemple "taille" et qui soit de meme nombre de bit que la machine... c-a-d que taille doit etre un type de 32 bit sur la machine 32 et 64 bits sur la machine 64.

    Du coup je comptais faire ca au niveau de la pre-compilation c'est a dire a coup de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #if (je sais pas quoi)
    /* je suis sur une machine 64*/
    typedef unsigned long int taille;
    #else
    /* je suis sur une machine 32*/
    typedef unsigned int taille
    #endif
    et je voudrais savoir quoi mettre a la place du test "(je ne sais pas quoi)".
    defined(BARBSBOU_MODE_64_BITS) et tu defini BARBSBOU_MODE_64_BITS sur ta ligne de compilation ou dans un fichier de configuration.

  15. #15
    Membre émérite Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Par défaut
    Le type int n'est-t-il pas un entier du nombre de bits de l'architecture ?

  16. #16
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par valefor Voir le message
    Le type int n'est-t-il pas un entier du nombre de bits de l'architecture ?
    Non. C'est rare sur les architectures 64 bits d'avoir un int de 64 bits. Les plus courantes (il y en a d'autres) se divisent en deux classes:
    - POSIX (LP64 -> long long, long, pointeur sur 64 bits, int sur 32 bits, short sur 16 bits, char sur 8 bits)
    - Windows (LLP64 -> long long, pointeur sur 64 bits, long, int sur 32 bits, short sur 16 bits, char sur 8 bits).

Discussions similaires

  1. [INFO]La meilleure plate forme d'agent pour java
    Par elalia dans le forum Programmation par agent
    Réponses: 5
    Dernier message: 13/04/2008, 15h42
  2. Information sur une plate forme de développement
    Par QAYS dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 21/02/2006, 14h55
  3. [Wamp] [Avis] Plate Forme de développement
    Par bor1s dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 09/11/2005, 15h54
  4. Type de redimensionnement d'une form
    Par Sub0 dans le forum Composants VCL
    Réponses: 7
    Dernier message: 05/12/2003, 21h56
  5. API réseau multi plates-formes style Wininet/Winsock
    Par jmmolina dans le forum Développement
    Réponses: 6
    Dernier message: 22/10/2003, 14h31

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