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 :

Problème d'affichage résultats


Sujet :

C++

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 225
    Points
    225
    Par défaut Problème d'affichage résultats
    Bonjour à tous,
    Je débute dans le langage C++ et je n'arrive pas à comprendre le résultat de ce petit programme :
    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
     
    #include <iostream>
     
    int main()
    {
      int some_number{144};
      float some_number1{14.f};
      float some_number2{14633.f};
      unsigned int val_1 = 328u; 
      int file_rights = 0755;
      std::cout << "some N " << some_number << std::endl;
      std::cout << "some N1 " << some_number1 << std::endl;
      std::cout << "some N2 " << some_number2 << std::endl;
      std::cout << "Un Int " << val_1 << std::endl;
    //  std::cout << "FR " << file_rights << std::endl; 
      return 0;
    }
    A la compilation j'ai l'erreur "unused variable "file_rights" et à l'exécution il m'affiche quand même la valeur de file_rights alors que le std::cout est en commentaire...
    Si quelqu'un a une idée Merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 689
    Points
    30 689
    Par défaut
    Salut,

    Reprenons depuis le début:

    Lorsque tu demandes au compilateur de compiler ton code, il y a deux grandes catégories de problèmes qui peuvent le faire réagir et t'envoyer un message:

    D'un coté, nous avons les erreurs: pour faire simple, le compilateur ne comprend pas ou n'est pas en mesure de faire ce que tu lui demande de faire. Dans ce cas, il va préférer t'envoyer un message et arrêter le processus de compilation plutôt que de "faire une connerie".

    De l'autre côté, il y a les avertissements : le compilateur n'est pas "tout à fait sûr" d'avoir compris ce que tu lui demandais de faire. Dans ce cas, il va également t'envoyer un message pour te dire "je ne suis pas sur d'avoir compris, il faudrait que tu vérifie si tu dis correctement ce que tu veux", mais il va continuer son travail "comme si de rien n'était".

    Typiquement, c'est un avertissement qui devrait être envoyé lorsqu'une variable est déclarée mais qu'elle n'est jamais utilisée. En gros, le compilateur va te demander "pourquoi avoir déclaré cette variable, si c'est pour ne jamais l'utiliser". Et c'est ce que tu aurais du avoir dans le cas présent.

    A moins que tu ais indiqué au compilateur -- au travers des options de compilation -- qu'il ne devait traiter tous les avertissements qu'il pourrait émettre comme si c'étaient des erreurs. Si c'est le cas, ben, il va faire exactement ce que tu lui demande, c'est à dire que, s'il veut émettre un avertissement, il le fera passer pour une erreur:

    il va "t'engueuler" parce qu'il ne comprend pas ce que tu lui demande et ... mettre fin au processus de compilation.

    Il est à noter que, si une erreur survient au moment de la compilation -- que ce soit une véritable erreur ou un avertissement considéré comme tel -- le programme exécutable ne sera pas (re)créé. Cela veut surtout dire que, si le fichier exécutable existe, il ne sera pas "écrasé" par la nouvelle version, et donc que, si tu l'exécute malgré tout, tu obtiendras le même résultat que la dernière fois où tu as exécuté le programme après une compilation réussie.

    Dans le cas présent, il faudrait voir les options de compilations utilisées -- avec Gcc, tu as sans doute utilisé l'option -Werror, qui demande au compilateur de traiter les avertissements comme s'il s'agissait d'erreurs -- ce qui fait que ce qui aurait pu n'être "qu'un simple avertissement" (pourquoi avez vous déclarer cette variable si c'est pour ne pas l'utiliser? ) a été traité comme une erreur, que le processus de compilation s'est arrêté là, et que le programme, s'il existe, va continuer à faire ce qu'il devait faire la dernière fois que la compilation s'est correctement déroulée.

    Il y a d'ailleurs de fortes chances que, si tu supprimes le fichier .exe de ton programme, tu puisses remarquer qu'il n'est effectivement pas généré si l'erreur continue à se produire .

    Il est, de manière générale, toujours utile de demander au compilateur d'émettre tous les arvertissements qu'il peut, et de faire "tout ce que tu peux" pour y remédier, car, dans la mesure où il t'indique "qu'il n'est pas sur d'avoir compris quelque chose", on peut craindre qu'il n'ait effectivement pas correctement compris ce que l'on attendait de sa part, et que le résultat ne corresponde de ce fait "pas tout à fait" à ce que l'on espérait ...

    Au final, les deux "les plus simples" qui pourraient consister soit à limiter les avertissements au "stricte minimum" soit à supprimer l'option demandant au compilateur de traiter les avertissements comme des erreurs sont -- aussi -- les possibilités qui sont le plus susceptibles de ... provoquer des problèmes par la suite.

    De ce fait, la meilleure des choses que tu puisse avoir à faire ici est sans doute ... de "corriger le problème", même si ce n'est finalement qu'un "problème potentiel", vu que le compilateur aurait naturellement choisi d'émettre un avertissement au lieu d'une erreur.

    Et pour y arriver, ben, tu as deux solutions:
    1. Soit tu fais en sorte de ne pas avoir déclaré la variable file_rigths pour rien
    2. Soit tu supprimes la déclaration de cette variable, vu que, de toutes façons, elle ne sert actuellement à rien

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 225
    Points
    225
    Par défaut
    Merci de ta réponse, en effet en mettant en commentaire la déclaration d'une variable que l'on utilise plus, le problème disparait, en enlevant la directive -Werror il m'avertit d'une variable non utilisée mais n'affiche pas sa valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -std=c++17 -Wall -Wextra

    Curieusement en recompilant avec -Werror (après avoir compilé sans) l'affichage de la variable non utilisée ne se fait plus.
    Et en repartant à zéro (déclaration et utilisation) tout fonctionne bien, avec les deux façons de compiler (avec et sans -Werror).
    Puis en elevant l'affichage et en recompilant avec -Werror on les même symptômes : avertissement et affichage de la valeur non utilisée(mis en commentaire) puis en enlevant -Werror on a simplement l'avertissement ... etc etc...
    J'espère avoir été clair.
    Le plus simple est effectivement de mettre en commentaire les déclarations des variables non utilisées ou d'enlever la directive -Werror mais laisser des déclarations de variables non utilisées peut à force rendre le code quelque peu désordonné.
    Merci à +

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 650
    Points : 10 621
    Points
    10 621
    Par défaut
    Citation Envoyé par xeron33 Voir le message
    Curieusement en recompilant avec -Werror (après avoir compilé sans) l'affichage de la variable non utilisée ne se fait plus.
    Il n'y a rien de curieux … et tu n'as pas compris la bascule -Werror

    Cette bascule transforme les avertissements en erreur : donc elle arrête la compilation (et ne fait pas l'édition des liens)
    Et donc si tu lances ton exécutable tu auras LE DERNIER exécutable avant les modifications.

    C'est pour cela quand tu commentes 1 ligne, elle est exécutée : parce que la compilation du code avec la ligne commentée a échouée (-Werror, …) (*) et tu exécutes avant la modification, sans la ligne commentée.

    *) Il y a aussi l'exemple fréquent des mauvais chemins : la compilation n'échoue pas, mais tu lances 1 exécutable qui est dans 1 autre dossier que le dossier ""résultat"" et qui n'est donc pas le résultat de la compilation/ édition des liens que tu as fait.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 225
    Points
    225
    Par défaut
    Merci pour ton aide !
    ok j'ai compris
    A+

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

Discussions similaires

  1. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  2. [VB6] [Flexgrid] Format d'affichage des numériques
    Par yansolo dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/10/2002, 21h00
  3. Affichage de documents PDF
    Par Dajon dans le forum C++Builder
    Réponses: 5
    Dernier message: 10/10/2002, 11h36
  4. probléme d'affichage d'une fiche
    Par sb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 09h43
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    Réponses: 5
    Dernier message: 27/05/2002, 21h00

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