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 :

Transtypages de pointeurs vers différentes tailles


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut Transtypages de pointeurs vers différentes tailles
    Ndlm : message initialement publié à la suite de ce fil.

    Salut, je n'ai pas vue sur les règles du club que le détérage de topic était interdit donc si c'est le cas désolé.

    Dans un code de jeu vidéo que je suis en train d'étudié il y a une application à la conversion d'une adresse en un entier c'est pour les animations, c'est un tableau d'entier mais à la dernière case de ce tableau le programmeur met l'adresse du tableau ce qui permettra par la suite quand l'anim sera terminé de remettre l'adresse du début du tableau et ainsi repartir pour un nouvel affichage.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    u32 gAnm_Itm1[] = {
      e_AnmKey_Null,
      16, e_Spr_Itm1,
      3, e_Spr_Itm1 + 1,
      3, e_Spr_Itm1 + 2,
      3, e_Spr_Itm1 + 3,
      3, e_Spr_Itm1 + 4,
      e_Anm_Goto, (u32)gAnm_Itm1
    };
    gAnm_Itm1 est convertit en (u32)gAnm_Itm1.

    Ce qui est très étonnant c'est que sous Cygwin il y a pas de message d'erreur du type :
    warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    Alors que sous mingw oui ce message d'erreur apparaît.

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par hbx360 Voir le message
    Salut, je n'ai pas vue sur les règles du club que le détérage de topic était interdit donc si c'est le cas désolé.
    Hé oui, c'est le cas. Surtout quand, au lieu de répondre au problème initial, tu en soulève un nouveau. Bon, comme tu as conscience d'avoir fait une connerie c'est pas très grave et on va pas te pourrir.

    Citation Envoyé par hbx360 Voir le message
    Dans un code de jeu vidéo que je suis en train d'étudié il y a une application à la conversion d'une adresse en un entier c'est pour les animations, c'est un tableau d'entier mais à la dernière case de ce tableau le programmeur met l'adresse du tableau ce qui permettra par la suite quand l'anim sera terminé de remettre l'adresse du début du tableau et ainsi repartir pour un nouvel affichage.
    Mouais. Je suis pas certain d'avoir bien compris le but de la manip. Le programmeur connait son tableau donc je vois pas pourquoi il aurait besoin de recopier l'adresse de ce tableau ailleurs. Mais même si c'est le cas, alors il peut pas la copier dans un tableau d'int. C'est pas sain. Une adresse est certes un nombre mais pas forcément un nombre "int".
    Si vraiment il a besoin d'associer l'adresse du tableau avec le tableau, il peut très bien créer une structure pour ça...
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct {
    	int tab[123];				// Tableau d'int
    	int *adr;				// Adresse du tableau
    };

    Citation Envoyé par hbx360 Voir le message
    Ce qui est très étonnant c'est que sous Cygwin il y a pas de message d'erreur du type :
    warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    Alors que sous mingw oui ce message d'erreur apparaît.
    Alors un warning n'est pas un message d'erreur. C'est juste un "avertissement". Dans la pratique oui, un bon prog C prendra en compte les warnings et cherchera à les supprimer mais en tout état de cause, un warning n'empêche pas "à priori" un programme de fonctionner. C'est juste un avertissement signifiant grosso-modo "attention, je ne suis pas certain d'avoir bien compris votre instruction alors je fais un choix pour la compiler mais peut-être que ce choix n'est pas celui que vous voulez".

    Ensuite la "sensibilité" du compilateur dépend aussi des arguments qu'on lui donne. Si on lui met par exemple -Wall il mettra des warnings sur tout ce qui lui semble un tant soit peu louche. Donc peut-être que le compilo de Cygwin n'est pas réglé pareil que le compilo mingw.
    Quoi qu'il en soit, si tu demandes la sensibilité max de compilation (-Wall -Wansi) tu auras probablement ton warning des deux côtés. Et ensuite tu auras une plus grande durée de vie de ton code si tu t'attaches à le résoudre.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Je pense que ce qui se passe, sous cygwin tu compiles en 32 bits alors que sous mingw en 64 bits.
    Parce que, en 32 bits, sizeof(int) == sizeof(XXX*) ... mais pas en 64 bits

    Types fondamentaux en C++ (<- lien en anglais)

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    @Sve@r, @foetus : merci pour vos explications !
    Hé oui, c'est le cas. Surtout quand, au lieu de répondre au problème initial, tu en soulève un nouveau. Bon, comme tu as conscience d'avoir fait une connerie c'est pas très grave et on va pas te pourrir.
    Ouf !

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Le type entier capable de représenter une adresse est (u)intptr_t.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 431
    Points : 172
    Points
    172
    Par défaut
    Ok merci Matt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2010, 13h12
  2. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  3. Réponses: 12
    Dernier message: 31/12/2005, 16h01
  4. Pointeur vers fonction
    Par flopaname dans le forum Langage
    Réponses: 3
    Dernier message: 23/06/2005, 15h46
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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