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 :

Modifier le caractère constant d'une variable


Sujet :

C

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut Modifier le caractère constant d'une variable
    Bonjour,

    Je dois fournir une valeur constante à une fonction dont le paramètre correspondant n'est aps déclaré comme constant.

    Y a-t-il en C l'équivalent du const_cast de C++, pour éviter d'ennuyeux messages du compilateur ?

    Merci.

  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 oodini Voir le message
    Je dois fournir une valeur constante à une fonction dont le paramètre correspondant n'est aps déclaré comme constant.
    C'est pas très clair. Tu veux dire qu'un fonction peut modifier une variable via un pointeur et que tu veux quand même lui passer l'adresse d'une variable non modifiable ? Faut pas faire ça. Comportement indéfini.

    Evidemment, un cast peu faire l'affaire, mais il ne résout rien. Il se contente de masquer le problème...

    Peux tu donner un exemple de code ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Tu as effectivement compris ce que je voulais faire.

    Même si cela paraît abscon, il y a une raison : je n'ai pas la main sur la définition de la variable, et je n'ai pas la main sur la définition de la fonction (j'utilise une API).

    MAIS je sais que la fonction ne modifiera pas la variable (utilisée comme opérande d'une multiplication matricielle). Disons que je lui fais confiance...

  4. #4
    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 oodini Voir le message
    MAIS je sais que la fonction ne modifiera pas la variable (utilisée comme opérande d'une multiplication matricielle). Disons que je lui fais confiance...
    C'est l'interface de la fonction qui est mal faite alors...

    Du moment que tu sais ce que tu fais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       fonction ((TYPE*)adresse);

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    C'est l'interface de la fonction qui est mal faite alors...
    Nous sommes bien d'accord. :-)

    Du moment que tu sais ce que tu fais...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       fonction ((TYPE*)adresse);
    Je savais pour le type, mais il s'agit là d'un qualificateur const.
    J'ai besoin de convertir un const en non const, puis de donner son adresse en paramètre à la fonction.

  6. #6
    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 oodini Voir le message
    Je savais pour le type, mais il s'agit là d'un qualificateur const.
    J'ai besoin de convertir un const en non const, puis de donner son adresse en paramètre à la fonction.
    C'est très exactement ce que fait l'exemple que j'ai donné
    Rappel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       fonction ((TYPE*)adresse);

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par défaut
    L'exemple d'Emmanuel suffit.
    Le cast en C strippe tout, y compris les qualificateurs const. Voilà pourquoi il est à bannir en C++, qui propose des alternatives plus saines (ici en C, c'est tout ce qu'on a, alors on fait avec).
    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.

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par défaut
    OK, ben merci aux deux.

    Ca répond à mes questions.

Discussions similaires

  1. méthode POST avec les caractères '&' et '+' dans une variable
    Par ayvong dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 01/07/2008, 20h38
  2. Concaténation d'une constante avec une variable
    Par perlgirl dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2007, 14h07
  3. Réponses: 6
    Dernier message: 24/07/2007, 12h56
  4. Réponses: 7
    Dernier message: 20/04/2007, 16h42
  5. [SQL] Problème d'affichage de caractère spéciaux dans une variable chaîne
    Par Kryptonaute dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/08/2006, 08h40

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