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 :

Variable non utilisée dans macro


Sujet :

C++

  1. #21
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Bonjour.

    Citation Envoyé par Josiane22 Voir le message
    Du coup, je perd l'intéret de la chose puisque je compile des choses qui ne sont pas utiles... Et puis, mon programme est suffisamment compliqué, je n'ai pas trop envie de rajouter autant de ligne de code que de macro non utilisées...
    Je ne sais pas quel compilateur tu utilises, mais un truc qui sert à rien dans le code sera occulté par le compilateur en mode release.

    PS: à vérifier quand même au vu du static...

    PS2: (c'est mon opinion à moi seul) les macros en tant que fonction c'est le mal absolu. C'est pas débuggable, c'est pas maintenable, c'est le bordel d'un compilateur à un autre, bref ça devrait pas exister (nous sommes des développeurs, pas des scripteurs). Il y a les templates, les inline, les forceinline, c'est exactement pareil et sans les défauts. De plus en tant que fonction inline ou template il n'y aurait plus ce warning...

    PS3: (après lecture complète des messages) On te demande de retirer les warnings sans modifier le code en profondeur. Je pense que la prochaine étape sera de te demander que le logiciel fasse le café en changeant une seule ligne de code...
    Tu dois expliquer que le père Noël n'existe pas...

    PS4: Comme l'a signalé Bousk, sous visual studio tu as les #pragma warning. N'y a-t-il pas un équivalent sous gcc ?

    Citation Envoyé par Bousk;7214374
    Tu peux masquer le warning (c'est un simple pragma que [URL="https://www.google.com/search?q=hide+warning+message+C&aq=f&oq=hide+warning+message+C&aqs=chrome.0.57j0.7342j0&sourceid=chrome&ie=UTF-8"
    Google te donnera en ~1s[/URL])
    >> C'est je trouve un mauvais choix.
    C'est un très mauvais choix en effet lorsque tu compiles ton projet à toi. Par contre lorsque tu compiles des projets tel que ffmpeg ou openframeworks, tu es vraiment content que ça existe.

  2. #22
    Membre habitué Avatar de nowahn
    Homme Profil pro
    Inscrit en
    Août 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 84
    Points : 150
    Points
    150
    Par défaut
    Rebonjour,

    Citation Envoyé par Josiane22
    Tu pourrais m'expliquer un peu ce que fais cette ligne?
    Laquelle ? Celle-là:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    static double __attribute__((__unused__)) truc;
    Citation Envoyé par Josiane22
    De ce que j'ai compris, ca veux dire en gros "déclare truc mais attention, je sais que truc ne sera pas toujours utilisé. Donc ne me le signale pas à chaque fois...". c'est ça?
    C'est exactement ça, voir ici
    Citation Envoyé par Josiane22
    Si oui, quelle différence entre ça et une option de compilation qui ne m'afficherais pas les warning.
    La différence c'est que l'attribut ne s'applique qu'a la variable en question, et ne désactive le warning que pour ces variables, pas pour les variables qui ne sont pas marquées avec cet attribut. L'option de compilation, elle, désactivera ce warning pour toutes les variables.
    Citation Envoyé par Josiane22
    J'ai un peu peur de cacher mon problème au lieu de le supprimer
    Toute la question est là, est-ce un problème ? Mais il me semble que ton but principal (compte tenu des contraintes que tu as) est justement de masquer ce problème pour pouvoir te concentrer sur les autres.

    Pour revenir sur le pourquoi le programmeur a écrit un tel code:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static double truc;
    #define TOTO(a) ((truc=(a)) == 0.0 ? 0.0 : 2*truc)
    Ça évite la répétition des effets de bords (voir cette FAQ C).
    Note que pour ce problème, g++ offre une extension:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    #define TOTO(a) ({ double truc=(a); truc == 0.0 ? 0.0 : 2*truc; })
    (Voir ici.)

    Cependant, la solution C++ à ce problème est d'utiliser des fonctions inline:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    inline double TOTO(double a) {return a == 0.0 ? 0.0 : 2*a;}
    (Les macros sont la solution C pour optimiser une « fonction » en supprimant l'appel de fonction, la solution C++ pour ça, c'est les fonctions inline.)
    Cette solution, en plus d'être du C++, me paraît compatible avec ta contrainte « je dois apporter un minimum de changement » (après, ça dépend de la quantité de telles macros).

  3. #23
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 130
    Points : 33 063
    Points
    33 063
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par nowahn Voir le message
    Cependant, la solution C++ à ce problème est d'utiliser des fonctions inline:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    inline double TOTO(double a) {return a == 0.0 ? 0.0 : 2*a;}
    (Les macros sont la solution C pour optimiser une « fonction » en supprimant l'appel de fonction, la solution C++ pour ça, c'est les fonctions inline.)
    Cette solution, en plus d'être du C++, me paraît compatible avec ta contrainte « je dois apporter un minimum de changement » (après, ça dépend de la quantité de telles macros).
    C++ ou pas, c'est le compilateur qui décidera au final s'il inline la méthode.
    Donc la seule vraie solution pour "l'inliner" c'est la macro qui remplacera effectivement l'appel par le code de la fonction en question.

Discussions similaires

  1. Option pour voir les variable non utilisées ?
    Par lex13 dans le forum NetBeans
    Réponses: 13
    Dernier message: 25/08/2007, 13h57
  2. [VBA][02]Détection des variables non utilisées
    Par cluis dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/03/2007, 11h20
  3. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 18h43
  4. Remonter warnings sur variables non utilisées
    Par titomcmoi dans le forum MFC
    Réponses: 2
    Dernier message: 30/05/2006, 13h42
  5. nommage de cellule et utilisation dans macro
    Par tritri38 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2006, 17h56

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