Bonjour a tous,

voila lorsque j'essaye de compiler une partie d'un projet avec gcc dont je mets le code (ceci est une version "light" afin de reproduire l'erreur juste)

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
 
#include <stdio.h>
#include <string.h>
 
enum SL_ID_CODE{    SL_FLOAT,
                    SL_DOUBLE,        
                    SL_INT,           
                    SL_CHAR,         
                    SL_STRING,       
                    SL_LONG,         
                    SL_UNDEF};
typedef enum SL_ID_CODE SL_ID;
 
#define SL_CHAR_FLOAT  "float"
#define SL_CHAR_DOUBLE "double"
#define SL_CHAR_INT    "int"
#define SL_CHAR_CHAR   "char"
#define SL_CHAR_STRING "string"
#define SL_CHAR_LONG   "long"
 
/**
 * \enum SL_ID_ERROR
 * \brief codes retour possibles
 *
 */
enum SL_ID_ERROR{SL_OK, 
                    SL_ERROR,                 /*! < Une erreur est survenue*/
                    SL_ERROR_FILE_EXIST,      /*! < Tentative de creation d'un fichier deja existant*/
                    SL_ERROR_READ,            /*! < Erreur de lecture*/
                    SL_ERROR_WRITE,           /*! < Erreur d'écriture*/
                    SL_ERROR_OPEN_FILE,       /*! < Erreur à l'ouverture du fichier */
                    SL_ERROR_FILE_NOT_OPENED, /*! < Erreur de flux*/
                    SL_ERROR_UNKNOWN_DATA,    /*! < Type de données non reconnues*/
                    SL_ERROR_VAR_NOT_FOUND,   /*! < Variable non trouvée*/
                    SL_ERROR_TYPE_MISMATCH,   /*! < Types differents*/
                    SL_ERR0R_SL_NOT_INITIALISED};      /*! < Utilisation d'une liste non initialisée */
 
typedef enum SL_ID_ERROR SL_CODE;
 
/**
 * \union SL_VarType
 * \brief stockage de la valeur lue dans le fichier en fonction de son type
 *
 */
typedef union 
   {
   double   slDouble;
   int      slInt;
   char     slChar;
   char     *slString;
   long     slLong;
   float    slFloat;
   } SL_VarType;
 
typedef struct
{
    SL_VarType value;
    SL_ID type;
}SL_Var;
 
 
typedef struct 
{
    SL_Var contenu;
    FILE *file;              
}StringList;
 
SL_CODE SL_readFile(StringList const *Liste);
 
/*lecture d'un fichier, fichier supposé ouvert par une autre fonction, de meme pour la fermeture */
SL_CODE SL_readFile(StringList const *Liste)
{
    SL_CODE sl_er=SL_OK;
    char buffer[1024];
    char *res=NULL;
    SL_Var element;
 
 
    if (Liste->file == NULL)
    {
        sl_er = SL_ERROR_FILE_NOT_OPENED;
        return sl_er;
    }
    rewind(Liste->file);  
 
 
 
    while(feof(Liste->file)==0)
    {
        res=fgets(buffer, sizeof buffer, Liste->file);
 
        if (res==NULL)
        {
            sl_er = SL_ERROR;
            break;
        }
 
       /*la partie de gestion des données recues avec fgets ont été supprimées   volontairement afin d'alleger le code copié */
        /*type de donnée */
        if (strncmp(buffer,SL_CHAR_INT,sizeof SL_CHAR_INT ) ==0) 
            {element.type=SL_INT;}
        else if (strncmp(buffer, SL_CHAR_DOUBLE ,sizeof SL_CHAR_DOUBLE ) ==0)  
            {element.type=SL_DOUBLE;}
        else if (strncmp(buffer, SL_CHAR_FLOAT  ,sizeof SL_CHAR_FLOAT )  ==0)  
            {element.type=SL_FLOAT;}
        else if (strncmp(buffer, SL_CHAR_LONG   ,sizeof SL_CHAR_LONG )   ==0)  
            {element.type=SL_LONG;}
        else if (strncmp(buffer, SL_CHAR_CHAR   ,sizeof SL_CHAR_CHAR )   ==0)  
            {element.type=SL_CHAR;}
        else if (strncmp(buffer, SL_CHAR_STRING ,sizeof SL_CHAR_STRING ) ==0)  
            {element.type=SL_STRING;}
        else
        {
            sl_er = SL_ERROR_UNKNOWN_DATA;
        }
   }
 
    return sl_er;
}
Donc quand j'essaye de compiler ce code, j'ai un message d'avertissement comme quoi le code à partir du premier "if" ne sera jamais executé.
Hors j'avoue que je ne comprend pas trop pourquoi.
Voici la ligne de commande de gcc
gcc -O2 -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int
-Werror-implicit-function-declaration -Wmain -Wparentheses
-Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused
-Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef
-Wshadow -Wpointer-arith -Wbad-function-cast -Wwrite-strings
-Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes
-Wmissing-prototypes -Wmissing-declarations -Wmissing-noreturn
-Wformat -Wmissing-format-attribute -Wno-deprecated-declarations
-Wpacked -Wredundant-decls -Wnested-externs -Winline -Wlong-long
-Wunreachable-code
En plus court, il s'agit de la configuration "paranoia" donné par Emmanuel Delahaye bien souvent..

Et quant à gcc, il s'agit de la version 4.1.2


Merci d'avance,
Bonne soirée/Journée,
G.

Edit : je ne cherche pas à créer un executable avec ce source mais uniquement un fichier objet