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 :

Passage de paramètre faux (#define)


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut Passage de paramètre faux (#define)
    Bonjour,

    j'ai un petit problème qui me bloque. Je veux lire multiple variable déjà définies dans une boucle for. mon problème est que lorsque je passe la variable intégrant le compteur i, il y a un "conflit" entre la chaîne de caractère que je le génère et le nom réel de la variable définie

    Ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define NOM1=5
    #define NOM2=10
    #define NOM3=15
    #define NOM4=20
     
     
    for (i=1;i<5;i++)
    {
    fonction("NOM%d",i);  // fonction(int x)
    }
    comment je peux passer la valeur correspondante(5, 10) à ma fonction.

    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur 3D
    Inscrit en
    Avril 2008
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur 3D

    Informations forums :
    Inscription : Avril 2008
    Messages : 400
    Points : 968
    Points
    968
    Par défaut
    Il faut que tu te renseignes sur les tableaux ('arrays' en anglais).

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fishingman Voir le message
    Bonjour,

    j'ai un petit problème qui me bloque. Je veux lire multiple variable déjà définies dans une boucle for. mon problème est que lorsque je passe la variable intégrant le compteur i, il y a un "conflit" entre la chaîne de caractère que je le génère et le nom réel de la variable définie

    Ex:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #define NOM1=5
    #define NOM2=10
    #define NOM3=15
    #define NOM4=20
     
     
    for (i=1;i<5;i++)
    {
    fonction("NOM%d",i); // fonction(int x)
    }


    comment je peux passer la valeur correspondante(5, 10) à ma fonction.

    Merci
    Salut

    Tu peux pas. En dehors du fait que "%d" est un format spécifique aux fonctions de type printf() (et non un élément du langage C), les macros sont traduites par le préprocesseur en précompilation alors que la variable "i" est exploitée lors de l'exécution.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    static int nom[4]={5, 10, 15, 20};
    for (i=0;i<4;i++)
    {
        fonction(nom[i]); // fonction(int x)
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour à tous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define NOM1=5
    #define NOM2=10
    #define NOM3=15
    #define NOM4=20
    c'est pas bien

    Si tu veux utiliser des define, cela ressemble plus à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #define NOM1 5
    #define NOM2 10
    #define NOM3 15
    #define NOM4 20
    Page sur Developpez : http://pbriand.developpez.com

  5. #5
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Tu peux le faire comme ça :

    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
    #include <stdio.h>
    #include <stdlib.h>
     
    #define X_NOM       \
      X(1, 5)           \
      X(2, 10)          \
      X(3, 15)          \
      X(4, 20)
     
    void fonction(char * s, int i) {
      printf("%s %d\n", s, i);
    }
     
    int main(void) {
    #define X(num, val) fonction("NOM" #num, val);
      X_NOM
    #undef X
      return EXIT_SUCCESS;
    }
    Qui te renverra :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NOM1 5
    NOM2 10
    NOM3 15
    NOM4 20
    Plus tu pédales moins fort, moins t'avances plus vite.

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Bonjour,
    Merci pour vos réponses. A propos des "#define", j'ai cité juste un exemple. Réellement j'utilise le logiciel Labwindows qui utilise le langage C. Lorsque j'ajoute un TextBox dans l'interface graphique, il m'ajoute automatiquement #define nom_textbox index dans le fichier.h.
    Donc je peux pas changer cette déclaration. Aussi je veux faire une simple boucle for pour lire tout les TextBox à la fois. la fonction de lecture de TextBox (GetCtrlVal) nécessite le passage d'index non pas la chaîne de caractère du nom.
    C'est ce que je veux en réalité. Est ce que vous avez une autre idée ou méthode qui me permet de récupérer les valeurs de TextBox.
    Merci beaucoup.

  7. #7
    Membre éclairé
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Points : 842
    Points
    842
    Par défaut
    Comme tu n'as pas la maîtrise des noms de textbox, je vois mal comment tu pourrais faire autrement que les redéfinir en dur dans le code.
    Après, peut-être qu'on peut ruser, quels noms ont tes textbox ?
    Plus tu pédales moins fort, moins t'avances plus vite.

  8. #8
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fishingman Voir le message
    Bonjour,
    Merci pour vos réponses. A propos des "#define", j'ai cité juste un exemple. Réellement j'utilise le logiciel Labwindows qui utilise le langage C. Lorsque j'ajoute un TextBox dans l'interface graphique, il m'ajoute automatiquement #define nom_textbox index dans le fichier.h.
    Donc je peux pas changer cette déclaration. Aussi je veux faire une simple boucle for pour lire tout les TextBox à la fois. la fonction de lecture de TextBox (GetCtrlVal) nécessite le passage d'index non pas la chaîne de caractère du nom.
    C'est ce que je veux en réalité. Est ce que vous avez une autre idée ou méthode qui me permet de récupérer les valeurs de TextBox.
    Merci beaucoup.
    Je vois mieux le truc. Tu utilises un outil qui génère automatiquement des tokens NOM1 NOM2 NOM3.
    En fait, ces tokens sont juste là pour améliorer la lisibilité du code. C'est en effet plus lisible si tu écris "ouvrir_text(NOM1)" que si tu écris "ouvrir_text(12)"
    Mais ce qu'il faut savoir, c'est que le préprocesseur traduit les macros avant compilation et qu'au final, le compilateur ne voit que la 2° écriture.

    Maintenant tu as une possibilité. Tu sais combien de TextBox tu as. Ou peut-être que tu as une façon de le savoir (style un "getNumberOfBox()"). Et tu sais que ton LabWindows incrémente les indices à chaque création. Donc tu peux faire un truc comme ça
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (i=NOM1; i < (getNumberOfBox() + NOM1 - 1); i++)
    {
        fonction(i)
    }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Mars 2008
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2008
    Messages : 109
    Points : 69
    Points
    69
    Par défaut
    Merci à tous,
    Enfin j'ai trouvé une solution. Il y a une option dans l'outil que j'utilise est que je peux intégrer plusieurs controles (textbox) dans un seul vecteur "ControlArray".
    En intégrant les textbox dans un vecteur j'ai une autre commande qui les manipules.

    GetCtrlVal(panelHandle,UI_ControlArray[i]; val);

    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/12/2009, 03h17
  2. probleme lors du passage de paramètre
    Par maxmj dans le forum ASP
    Réponses: 4
    Dernier message: 18/11/2003, 00h15
  3. [XSL] Passage de paramètres à un template
    Par pantin dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 27/06/2003, 13h28
  4. passage de paramètres
    Par pram dans le forum XMLRAD
    Réponses: 5
    Dernier message: 18/02/2003, 17h28
  5. passage en paramètre d'un array dynamique 2D
    Par Guigui_ dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2002, 19h47

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