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 :

Remplacer le contenu d'un #define par une variable ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut Remplacer le contenu d'un #define par une variable ?
    Bonjour

    Je voudrai savoir si il est possible de remplacer l'intitulé d'un define par une variable déclarée dans le programme .

    Exemple, ici MAIL est défini pour contenir abc@dfg.fr
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define MAIL             "abc@dfg.fr"
    si je veux que l'adresse email que contiendra #define MAIL puisse être variable et changée à tout moment, comment puis faire ?

    Mon programme utilise le contenu de #define MAIL ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case SMTP_MAILFROM:
    strcpypgm2ram(VarString, (ROM char *) "Envoye par :<" MAIL ">\r\n" );
    goto SmtpTaskDetailString;
    Mon but étant de laisser la possibilité à l'utilisateur du programme d'entrer dans une textbox l'adresse mail souhaitée pour qu'ensuite celle ci soit utilisée par le programme .

    Je vous remercie de votre aide,

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut,

    ce n'est pas possible de changer une define en cour de route puisque après le passage du pré-compilateur toute les occurrences de MAIL seront remplacée par la chaine "abc@dfg.fr".

    Pour pourvoir la modifier tu peux déclarer une variable globale.

    char *mail;
    Ceci en dehors d'un block.
    Ainsi cette variable sera accessible de partout dans ton fichier.

    Cordialement,
    NeoKript

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Merci, mais si je remplace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define MAIL             "abc@dfg.fr"
    par
    Alors la ligne suivante me renvoi une erreur de syntaxe, pourriez vous me dire ce qu'il ne va pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcpypgm2ram(VarString, (ROM char *) "Envoye par :<" MAIL ">\r\n" );
    En fait il faudrait que MAIL soit remplacé par son contenu

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Passe par un buffer intermédiaire pour composer ton message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char buf[.....];
    sprintf(buf ,"Envoye par :<%s>\r\n",MAIL );
    strcpypgm2ram(VarString, (ROM char *) buf);

  5. #5
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Ne pourrai-t'on pas remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #define EXEMPLE "chaine de caractere"
    Par une constante global ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char [] = "chaine de caractere";
     
    #include ...
    ....
     
    int main ()
    {
        ...
    }

  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
    Pas pour tout ce qui exige une chaîne littérale (comme la concaténation par le compilateur même).
    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 éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    Citation Envoyé par diogene Voir le message
    Passe par un buffer intermédiaire pour composer ton message :
    Diogene, lorsque je compile ton code, j'ai un Warning :
    Warning [2066] type qualifier mismatch in assignment

    Pour faire mes essais, j'ai déclaré MAIL ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char MAIL[32] = {'a','b','c', '@', 'e','s','s','a','i','.','f','r'};
    Peux tu me dire ce qu'il ne va pas ?

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Je ne vois pas. D'ailleurs, je ne vois pas d'assignation dans le code tel que montré.

    Par ailleurs, il faut terminer correctement ton tableau MAIL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char MAIL[32] = {'a','b','c', '@', 'e','s','s','a','i','.','f','r', '\0'};
    // ou
    char MAIL[32] = "abc@essai.fr";

  9. #9
    Membre éclairé
    Inscrit en
    Septembre 2008
    Messages
    384
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 384
    Par défaut
    En fait je suis bloqué.
    Je vais vous indiquer le fond de mon problème :

    Je voudrai modifier un pilote : SMTP.c afin qu'il soit possible, depuis mon programme principal ( main.c ) de modifier les paramètres qui sont personnalisables.

    Je joins mes fichier smtp.c

    Par exemple dans smtp.c, on définit avec un define STMP_USER et SMTP_PASSWORD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define SMTP_USER       "MOI"     	//  entrer entre les guillemets le smtp user
    #define SMTP_PASSWORD   "GO"   //  entrer entre les guillemets le password de votre compte SMTP
    Je voudrais pouvoir, depuis mon programme principal : main.c changer le contenu des ces paramètres.

    Actuellement, ils sont en résident dans le code de mon programme, mais je voudrai que l'utilisateur puisse les changer à sa guise.

    L'ideal serait qu'ils soient remplacés par des chaines de caractères "char"
    Mais le pb est que si je défini un char xxx [...]; dans main.c, cette même variable n'est pas lisible par smtp.c ...

    Pourriez vous me dire comment vous vous y prendriez pour rendre les paramètres # define modifiables ?
    Fichiers attachés Fichiers attachés
    • Type de fichier : c SMTP.c (44,6 Ko, 1643 affichages)

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2015, 16h31
  2. [AC-2013] remplacer le nom d'un formulaire par une variable dans un Public Sub
    Par GuyDuLac dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/10/2014, 17h23
  3. [XL-2010] Remplacer le nom d un onglet par une variable
    Par toto92 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/02/2014, 16h40
  4. Réponses: 14
    Dernier message: 24/02/2012, 17h04
  5. Remplacer le contenu d'un div par un autre
    Par prgasp77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/10/2004, 23h48

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