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 :

Printf et mauvais arguments


Sujet :

C

  1. #1
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut Printf et mauvais arguments
    Bonsoir,

    J'ai une petite question pour les personnes connaissant la (/les) norme(s) C.

    Il y a-t-il un risque à passer un pointeur au spécificateur de format %x (au lieu du %p qui va bien) sur les plateformes où sizeof(int) != sizeof(void*)?
    Est-on :
    - en terrain connu où tout va bien
    - en comportement indéterminé
    - ou en comportement non spécifié
    ?

    Je soupçonne que l'endianess de la plateforme risque de rajouter une couche d'indéterminisme supplémentaire, mais avant d'avancer quoique ce soit (et dire "STOP!"), je préfèrerai en être sûr.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  2. #2
    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 Luc Hermitte Voir le message
    Il y a-t-il un risque à passer un pointeur au spécificateur de format %x (au lieu du %p qui va bien)<...>
    Le bon sens et la norme commandent d'utiliser "%p" et (void*) pour afficher la valeur d'un pointeur avec printf(). Toute autre manip invoque un comportement indéterminé.

  3. #3
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Super merci!
    Petite précision supplémentaire. En quoi la convertion vers void* est nécessaire ? C'est une question de spécs, où il peut y avoir des décalages dans les valeurs considérées ?
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  4. #4
    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 Luc Hermitte Voir le message
    Super merci!
    Petite précision supplémentaire. En quoi la convertion vers void* est nécessaire ? C'est une question de spécs, où il peut y avoir des décalages dans les valeurs considérées ?
    sizeof(void*) n'est pas garanti égal à sizeof(T*) pour T différent de char, unsigned char, signed char, void (c'est pour permettre des pointeurs gras sur les machines adressables par mot -- la tendance actuelle sur de telle machine est l'alternative sizeof(char) == sizeof(int)). Sans la conversion on peut donc avoir des problèmes.

  5. #5
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    D'accord.
    Merci pour les précisions.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. [Python 3.X] [pycan] mauvais argument dans spawnv
    Par Franito dans le forum Bibliothèques tierces
    Réponses: 3
    Dernier message: 10/03/2015, 21h41
  2. Réponses: 11
    Dernier message: 12/06/2013, 11h14
  3. Réponses: 4
    Dernier message: 31/10/2008, 18h54
  4. [SOAP::Lite] Mauvais arguments d'une fonction ?
    Par Le Barde dans le forum Web
    Réponses: 8
    Dernier message: 01/08/2008, 15h40
  5. Réponses: 5
    Dernier message: 09/01/2008, 20h30

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