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

  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 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
    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
    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]

  4. #4
    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é???

  5. #5
    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
    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.

  6. #6
    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?

  7. #7
    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..)

  8. #8
    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

  9. #9
    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
    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.

  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
    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....

  11. #11
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    c'est un programme

    Mais moi comme c'est mon ihm qui l'appel il faut que je la definisse comme fonction avec des parametres c'est possible???

    Et sinon je suis obligé de changer le ifdef par des if(parametre) ...??

  12. #12
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    En faite c'est quoi la difference entre un prog et une fonction???
    c'est la meme chose

  13. #13
    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
    Citation Envoyé par insa59
    En faite c'est quoi la difference entre un prog et une fonction???
    c'est la meme chose
    un programme est un binaire indépendant, que tu appelle depuis ton binaire en faisant un appel au système

    une fonction est un morceau de code lié au reste de ton application pour former un seul binaire

    là l'exemple que tu donnes est un programme (main)

  14. #14
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    D'accord

    Moi dans mon cas c'est mon ihm qui appel ce programme, donc il doit etre renomer et definie en tant que fonction c'est bien ca???

    De plus les ifdef du code doivent etre remplacés par des if????

  15. #15
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    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
     
     
    int main(int main(int argc, char **argv)
    {
    //Construction de l'interface
    /**************************************************
    *  CREATION ET PARAMETRAGE DE LA FENETRE PRINCIPALE.
    ***************************************************/
     
        papp->Fenetre = gtk_window_new(GTK_WINDOW_TOPLEVEL);  // Définition de la fenêtre
        gtk_window_set_title(GTK_WINDOW(papp->Fenetre), "Chaine MIMO"); // Titre de la fenêtre
        gtk_window_set_default_size(GTK_WINDOW(papp->Fenetre), 350, 300); // Taille de la fenêtre
    .........
    ..........
     
    ..........
    appel du programme analyseur

  16. #16
    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
    Citation Envoyé par insa59
    D'accord

    Moi dans mon cas c'est mon ihm qui appel ce programme, donc il doit etre renomer et definie en tant que fonction c'est bien ca???

    De plus les ifdef du code doivent etre remplacés par des if????
    ATTENDS ATTENDS !!!

    On ne sait pas ce que tu veux faire....

    Veux-tu garder un programme indépendant (ce qui est le cas actuellement) ou le transformer pour l'inclure comme une fonction dans ton propre programme ?

    Soit plus clair stp...

  17. #17
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    En faite moi aussi je suis perdue

    Si tu veux j'aimerais pouvoir lancer mon programme avec les parametres choisit par l'utilisateur. Je ne sais pas si je dois le redefinir en tant que fonction car j'ai deja un main ou bien le laisser en programme indépendant et si c'est le cas comment je fais pour l'appeler car il existe deja le main de l'ihm???

    La chronologie est la suivant
    1-creation de l'ihm
    2-ecriture des parametres modifier dans un fich.txt
    3-recuperation des données
    4-modification du prog

  18. #18
    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
    En fait la question à se poser est de savoir si, indépendamment de l'IHM, tu peux vouloir continuer à te servir du programme : si oui, il reste indépendant. Sinon, ce sera plus rapide de l'appeler en tant que fonction.

    Maintenant, en ce qui concerne les define, je ne vois pas 36 solutions :

    oui il faut transformer avec des if.

    Mais tu peux t'en tirer avec un minimum d'efforts :

    Si tu n'as qu'une routine appelée, tu passes en paramètre la valeur (0 ou 1) pour SAVE.

    Sinon, si tu as beaucoup de routines et/ou fichiers, dans le code, tu convertis en if.. et si tu as plusieurs fichiers, tu te mets une variable globale du style int SAVE . Tes ifdef deviennent donc :

    #ifdef ___SAVE

    devient if (SAVE)


    et

    #ifdef PLOT

    devient if ( ! SAVE )

    Maintenant, si tu gardes un prog. indépendant, tu passes le paramètre issu de l'IHM en paramètre d'appel system("prog -save") ou system("prog -plot")
    et tu le décodes dans le main, et affecte la variiable globale.

    Si tu transformes en fonction, tu l'ajoutes en paramètre...

  19. #19
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    dslé sauviron mais c'est quoi une routine???

    Est en faite oui je vais devoir l'appeler en tant que fonction

  20. #20
    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
    Citation Envoyé par insa59
    dslé sauviron mais c'est quoi une routine???
    une fonction

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