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 :

Utilisation de Define


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut Utilisation de Define
    Bonjour

    Je voulais savoir si il est possible de définir un define a l'interieur d'un fonction

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
     
    int analyseur(int a, int b, char* ch1, char* ch2)
    {
     
    if(*ch1=="test")
    define _SAVE
    ....
    .....
     
    #ifdef __SAVE__
      std::cout<<"Fonctionnement normal avec enregistrement du spectre dans le fichier "<<FileName<<endl;
      FILE *f1;
      f1=fopen(FileName,"w");
      fprintf(f1,"%d %d %d ",
    	  nbTx, nbRx, tailleDftSyncCourt);
     
    #endif
     
    }
    Le but serai d'utiliser par la suite des ifdef dans le code

    Merci

  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
    Pas "programmatiquement".
    Les defines doivent être connus avant même la compilation.
    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é
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Pas "programmatiquement".
    c'est a dire q'uon peut le faire ou pas???
    Sinon quelle solution peut on utilisé???

  4. #4
    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
    C'est-à-dire que tu ne peux pas faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(*ch1=="test")
    define _SAVE
    La solution à utiliser ?
    Un if() normal, tu n'as pas le choix.
    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.

  5. #5
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salux

    Les variables de te repugnent elles autant?

  6. #6
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Okie c'étairt simplement pour être sur

    En faite je dois modifier un prog deja existant. Le soucis et que les parametres que je dois pouvoir modifier sont definie en tant que define
    Voici un bout du code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    //#define __SAVE__     // mode enregistrement
    #define __PLPLOT__   // mode affichage
    #include <stdio.h>
    #include <stdlib.h>
    .....
     
    int main(int argc, char **argv)
    {
    #ifdef __SAVE__
      std::cout<<"Fonctionnement normal avec enregistrement du spectre dans le fichier "<<FileName<<endl;
      FILE *f1;
      f1=fopen(FileName,"w");
      fprintf(f1,"%d %d %d ",
    	  nbTx, nbRx, tailleDftSyncCourt);
    #endif
    ......
    .....
    #ifdef __PLPLOT__
      initPlplot();
    #endif
    Dans mon cas je dois pouvoir envoyer des paramtres a la fonction ci dessus, c'est a dire est ce qu'elle va faire un plot ou un save
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int analyseur(char* plot, char* save)
    {
     
    }
    Mais je suis un peu coincé car dans le code du départ il definit ces parametres en define. En faite au commencement on aller dans le code et on devais mettre en commentaire le choix non utilisé, desormais on commande cette fct a partir d'une ihm faite sur gtk ,c'est pour cela que je lui envoie les parametres pour savoir si il effetcue un plot ou bien un save

    Merci pour les suggestions

  7. #7
    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
    D'ailleurs, on n'utilise pas un char* pour ça : On utilise un type booléen, ou un bète int si on n'en a pas...

    Et au passage, y'a pas mal de const qui se perdent...
    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
    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
    c'est une fonction ????

    ou c'est un programme que tu appelles ?

    Si c'est un programme, ma méthode marche.... Si ça doit être "définitif" (mode de fonctionnement).

    Si c'est une fonction, ou un programme au coup par coup, il faut comme on l'a dit transformer avec des if, et passer le paramètre en argument....

  9. #9
    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
    A la limite tu peux faire une variable globale en char, de longueur fixe, et tester par rapport à cette variable, (mais tu auras tout le code) :

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    static char MONTEST="TEST1" ;
     
    static void Fonction ( .... )
    {
      int code ;
     
      sscanf ( &(MONTEST[4]), "%d",  &code );
     
      switch ( code )
       {
            case 1 : 
                  .......
                  break ;
     
            case 2 :
                  ......
                  break ;
       }
    }
    Et une fois ton fichier compilé, tu peux changer la valeur TEST1 dans le binaire (par exemple sous *n*x par un sed..)

  10. #10
    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
    bien sûr...

    Même à l'intérieur de la définition d'une structure, dans l'appel d'une fonction, etc....

    [EDIT]

    Désolé j'ai mal compris la question..

    Je répondais pour les "ifdef"

    Les define non c'est fait à la PRE-compilation....

    {/EDIT]

Discussions similaires

  1. Utilisation de #define
    Par --Peace-- dans le forum C
    Réponses: 3
    Dernier message: 05/12/2012, 21h48
  2. Réponses: 10
    Dernier message: 27/04/2011, 20h30
  3. undefined lvalue si j'utilise un #define
    Par petith dans le forum C
    Réponses: 3
    Dernier message: 18/12/2006, 13h30
  4. Utilisation bean:define ?
    Par SrK dans le forum Struts 1
    Réponses: 15
    Dernier message: 13/06/2006, 17h02
  5. Utilisation de DS (define space) || definir une variable ?
    Par TabrisLeFol dans le forum Assembleur
    Réponses: 3
    Dernier message: 02/02/2006, 18h39

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