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 :

Avertissements à la compilation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut Avertissements à la compilation
    Ndm : Déplacé depuis cette discussion.

    Bonjour ! J'ai voulu tester la bibliothèque proposée dans l'article. J'ai dû corriger une ligne (tout à la fin du fichier str.c) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
          //strng[j] = '\0';
          strip[j] = '\0';
    Après cela, j'arrive à compiler mon code mais j'ai un certain nombre d'avertissements. J'aurais voulu savoir si cela venait d'une erreur de ma part. J'utilise le compilateur Borland C++ 5.5.1, sous Windows 8.1. Voici mon code, avec les avertissements.

    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
    22
    23
    24
    25
    #include <stdio.h>
    #include "str.h"
    #include "str.c"
     
    void main(void)
    {
      getchar();
    }
     
    /*
    > Executing: C:\Program Files (x86)\ConTEXT\ConExec.exe "C:\BCC55\Bin\bcc32.exe" -nC:\Atelier\C\strings\str\ "C:\Atelier\C\strings\str\test.c"
     
    Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
    C:\Atelier\C\strings\str\test.c:
    Warning W8004 C:\Atelier\C\strings\str\str.c 58: 'ptr_pos' is assigned a value that is never used in function str_istr
    Warning W8012 C:\Atelier\C\strings\str\str.c 80: Comparing signed and unsigned values in function str_sub
    Warning W8060 C:\Atelier\C\strings\str\str.c 105: Possibly incorrect assignment in function str_split
    Warning W8012 C:\Atelier\C\strings\str\str.c 107: Comparing signed and unsigned values in function str_split
    Warning W8004 C:\Atelier\C\strings\str\str.c 109: 'tmp' is assigned a value that is never used in function str_split
    Warning W8004 C:\Atelier\C\strings\str\str.c 102: 'cs' is assigned a value that is never used in function str_split
    Warning W8004 C:\Atelier\C\strings\str\str.c 143: 'tmp' is assigned a value that is never used in function str_join
    Warning W8008 C:\Atelier\C\strings\str\str.c 176: Condition is always true in function str_remplace
    Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
    > Execution finished.
    */

  2. #2
    Membre éclairé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning W8004 C:\Atelier\C\strings\str\str.c 58: 'ptr_pos' is assigned a value that is never used in function str_istr
    regarde à la ligne 58 de str.c et regarde comment tu utilises ptrpos et ce que tu en fait

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par neuneutrinos Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning W8004 C:\Atelier\C\strings\str\str.c 58: 'ptr_pos' is assigned a value that is never used in function str_istr
    regarde à la ligne 58 de str.c et regarde comment tu utilises ptrpos et ce que tu en fait
    Merci pour ta réponse. En fait je doutais s'il y avait vraiment des choses à corriger dans le code ou si le problème venait de l'utilisation que j'en faisais.

    Voici la modification qui permet de supprimer l'avertissement en question. Effectivement ce n'était pas trop difficile à trouver.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /* Borland C++ 5.5.1 */
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <ctype.h>
     
    int str_istr (const char *cs, const char *ct)
    {
      int index = -1;
     
      if (cs != NULL && ct != NULL)
      {
        //char *ptr_pos = NULL; // 'ptr_pos' is assigned a value that is never used
        char *ptr_pos;
     
        ptr_pos = strstr(cs, ct);
     
        if (ptr_pos != NULL)
        {
          index = ptr_pos - cs;
        }
      }
      return index;
    }
     
    void main(void)
    {
      char s2[] = "Developpez";
     
      printf("%d\n", str_istr(s2, "opp"));
     
      printf("Appuyez sur la touche Entr%ce... ", (char)130);
      getchar();
    }
    Je m'attaque au reste.

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Voici pour le second avertissement. Il ne laisse rien passer, ce compilateur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    char *str_sub(const char *s, unsigned int start, unsigned int end)
    {
      char *new_s = NULL;
     
      if (s != NULL && start < end)
      {
        new_s = malloc(sizeof(*new_s) * (end - start + 2));
     
        if (new_s != NULL)
        {
          //int i; // Comparing signed and unsigned values
          unsigned int i;
     
          for (i = start; i <= end; i++)

  5. #5
    Membre éclairé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Par défaut
    Le premier warning n'étais pas trop grave.

    Mais celui-çi est plus important.
    Les opérations entre signed et unsigned sont légales mais peuvent entraîner une faille de sécurité (integer overflow)

    EDIT:

    j'ai regarder la suite des warnings :p
    Warning W8060 C:\Atelier\C\strings\str\str.c 105: Possibly incorrect assignment in function str_split
    ça sent le code compacte ou alors (par exemple) un '==' transformé accidentellement en '='


    Warning W8008 C:\Atelier\C\strings\str\str.c 176: Condition is always true in function str_remplace
    la je suis prêt à parier que tu as fais une assignation dans ton if

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par neuneutrinos Voir le message
    Warning W8008 C:\Atelier\C\strings\str\str.c 176: Condition is always true in function str_remplace
    là je suis prêt à parier que tu as fais une assignation dans ton if
    Je n'avais pas vu la suite de ton message. La modification à faire était celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char *str_remplace (const char *s, unsigned int start, unsigned int length, const char *ct)
    {
      char *new_s = NULL;
     
      //if (s != NULL && ct != NULL && start >= 0 && length > 0)
      if (s != NULL && ct != NULL && length > 0)
    Je précise que le code n'est pas de moi ; c'est celui qui est proposé dans cet article.

    L'article est très bien (autant que je puis en juger), mais il y aurait une faute de frappe à corriger dans le code (voir mon premier message). Quant aux autres modifications que j'ai faites pour moi-même et que j'ai rapportées ici, elles ne sont pas vraiment nécessaires (encore que ce soit toujours plus agréable d'avoir un code qui se compile sans avertissement).

    C'est dommage aussi, me semble-t-il, qu'aucun exemple d'utilisation de la librairie n'ait été fourni, mais vu la date de l'article, il est sans doute un peu tard pour y revenir.

    Je marque la discussion comme résolue.

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 172
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par neuneutrinos Voir le message
    Les opérations entre signed et unsigned sont légales mais peuvent entraîner une faille de sécurité (integer overflow).
    Merci pour ta remarque. C'est noté !

    Pour les quatre avertissements suivants, qui concernent tous la même fonction, il y en a trois qui reviennent aux cas précédents, mais le sens du quatrième est moins clair, du moins pour moi.

    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
    char **str_split(char *s, const char *ct)
    {
      char **tab = NULL;
     
      if (s != NULL && ct != NULL)
      {
        //int i;
        unsigned int i;
        //char *cs = NULL;
        char *cs;
        size_t size = 1;
     
        for (i = 0; (cs = strtok(s, ct)); i++) // Possibly incorrect assignment (?)
        {
          if (size <= i + 1)
          {
            //void *tmp = NULL;
            void *tmp;

  8. #8
    Membre éclairé
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    70
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 70
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for (i = 0; (cs = strtok(s, ct)); i++) // Possibly incorrect assignment (?)
    Le compilateur te met en garde pour une possibilité d'érreur dans le traitement d'une condition
    mais ici cette compactions est voulue.

    Pour signaler que cette écriture est volontaire tu dois rajouter !=0 (ou !=NULL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     for (i = 0; (cs = strtok(s, ct))!=NULL; i++) // Possibly incorrect assignment (?)
    Ce warning peut sûrement être désactivé das les options de compilations

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

Discussions similaires

  1. FrameWork et avertissement à la compilation
    Par joc02 dans le forum Langage
    Réponses: 1
    Dernier message: 03/01/2014, 15h03
  2. XE5 et avertissement de compilation
    Par Papy214 dans le forum Débuter
    Réponses: 3
    Dernier message: 20/11/2013, 13h55
  3. Essai de suppression d'avertissement à la compilation
    Par hannibal.76 dans le forum Bases de données
    Réponses: 6
    Dernier message: 16/04/2012, 15h51
  4. [C#] Comment supprimer cet avertissement lors de la compilation ?
    Par Cazaux-Moutou-Philippe dans le forum C#
    Réponses: 8
    Dernier message: 29/04/2006, 14h31
  5. [Débutant] [Compilation] Avertissement deprecated
    Par javamantools dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2005, 15h33

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