Forum Clubic

[GCC -Wall] ou comment exclure un warning - [RESOLU]

:ane:

et la partie code associée…


#ifndef CONSTSOLVER_H
#define CONSTSOLVER_H

#define NBMETHODS 11

#define iSINGLEPOSITION  1
#define iSINGLECANDIDATE	2
#define iCANDIDATELINES  3
#define iDOUBLEPAIRS  4
#define iMULTIPLESLINES  5
#define iNAKEDMULTIPLES  6
#define iHIDDENMULTIPLES	7
#define iXWINGCOL  	8
#define iXWINGROW  	9
#define iSWORDFISHCOL  10
#define iSWORDFISHROW  11

#define sSINGLEPOSITION  "Single Position"
#define sSINGLECANDIDATE	"Single Candidate"
#define sCANDIDATELINES  "Candidate Lines"
#define sDOUBLEPAIRS  "Double Pairs"
#define sMULTIPLELINES  "Multiples Lines"
#define sNAKEDMULTIPLE  "Naked Multiples"
#define sHIDDENMULTIPLE  "Hidden Multiples"
#define sXWINGCOL  	"X-Wing by Col."
#define sXWINGROW  	"X-Wing by Row."
#define sSWORDFISHCOL  "Swordfish by Col."
#define sSWORDFISHROW  "Swordfish by Row."

static char *pMethodsNames[] = {
  sSINGLEPOSITION,
  sSINGLECANDIDATE,
  sCANDIDATELINES,
  sDOUBLEPAIRS,
  sMULTIPLELINES,
  sNAKEDMULTIPLE,
  sHIDDENMULTIPLE,
  sXWINGCOL,
  sXWINGROW,
  sSWORDFISHCOL,
  sSWORDFISHROW
};

#endif

Voilà, je définis donc un tableau *pMethodsNames[] en “global”, mais je l’utilise dans d’autres fichiers. De fait GCC “pense” que c’est une variable inutilisée, ce qu’elle n’est bien évidemment pas. D’où ma question : comment faire disparaitre cet avertissement qui apparait autant de fois que j’include ce .h, soit quelques dizaines de fois…
J’aimerai autant que possible conserver l’option -Wall de GCC dans l’immédiat. :oui:
Je sêche. :neutre:
:miam:
PS: GCC en version 4.1.2
PS2: options de compilations: -Wall, -g et -ansi.

Et en virant le static, et le remplaçant par un const?

Parce que moi un static, ça veut bien dire ce que ça veut dire : ie. un truc local au fichier.

Euh… Les globales, c’est mal…
Surtout que dans ce cas, ci, visiblement, t’as pas trop besoin de var globales… des constantes suffisent.

Sinon, static = utilisable uniquement par le fichier. Donc, tu vires tout simplement static et c’est fait.

Meme si en effet les variables globales “cay le mal”, ben parfois c’est utile quand même. Par ailleurs, ici tu te doutes que tu ne vois pas tout le programme (sans doute un peu gros désormais… :lol: ) mais sois sûr que j’en ai besoin par ailleurs… De plus, les variables globables, “c’est comme le goto”, c’est à utiliser avec parcimonie pour ne citer que le K&R, ce que je pense avoir fait dans le cas présent. :o
Autant je comprends vos arguments et les raisons qui les amenent, autant j’ai du mal à me dépetrer des messages de GCC.
1er scenario, je change le static en const:


const char *pMethodsNames[] = {
  sSINGLEPOSITION,
  sSINGLECANDIDATE,
  sCANDIDATELINES,
  sDOUBLEPAIRS,
  sMULTIPLELINES,
  sNAKEDMULTIPLE,
  sHIDDENMULTIPLE,
  sXWINGCOL,
  sXWINGROW,
  sSWORDFISHCOL,
  sSWORDFISHROW
};

Messages associés…

autant de fois que je l’ai appelé… quelques fois en fait! :paf:

2e scenario, je vire le static


char *pMethodsNames[] = {
  sSINGLEPOSITION,
  sSINGLECANDIDATE,
  sCANDIDATELINES,
  sDOUBLEPAIRS,
  sMULTIPLELINES,
  sNAKEDMULTIPLE,
  sHIDDENMULTIPLE,
  sXWINGCOL,
  sXWINGROW,
  sSWORDFISHCOL,
  sSWORDFISHROW
};

Ben, meme résultat… :neutre:
Je dois passer à côté de qqch, car je suis en effet sur le principe d’accord avec vous… Mais… :neutre: Entre la théorie et la pratique, y’en a toujours aussi long à dire! :ane:

Pour le reste dans display.c, et le reste, je ne fais qu’un :


#include "solver/constsolver.h"

ou un include qui l’appelle ensuite.
J’ai connu plus exotique… :paf: :miam:
D’où au final mon incompréhension chaque fois plus grande. :heink:

Max-k : faut penser à dormir parfois! :ane: :stuck_out_tongue: :sleep:

Non.

Les globals c’est bien.

Quand on sait s’en servir de manière intelligente.

ie: des constantes typées, etc.

Je suis un peu une quiche en C, mais là, la variable est allouée pour chaque module, et en plus elle est vue en tant que doublon. Il vaudrait pas mieux la mettre dans 1 seul .c et le rendre visible dans les autres par un “extern” (ou autre: l’équivalent d’une déclaration publication en Java).

Sinon, la méthode de contournement crade, ça marcherait?
par macro


#define getMethodNames() {sSINGLEPOSITION, sSINGLECANDIDATE, sCANDIDATELINES, sDOUBLEPAIRS, sMULTIPLELINES, sNAKEDMULTIPLE, sHIDDENMULTIPLE, sXWINGCOL, sXWINGROW, sSWORDFISHCOL, sSWORDFISHROW}

ou encore par fonction dans le .c


char** getMethodNames(){
return {sSINGLEPOSITION,
 sSINGLECANDIDATE,
 sCANDIDATELINES,
 sDOUBLEPAIRS,
 sMULTIPLELINES,
 sNAKEDMULTIPLE,
 sHIDDENMULTIPLE,
 sXWINGCOL,
 sXWINGROW,
 sSWORDFISHCOL,
 sSWORDFISHROW};
}


et en la déclarant dans le .h

:neutre:

Ta citation est d’à propos! :paf: :na:
Tu dis, non à quoi?

Moi je croyait qu’il était sans-non :??:

je trouverais la sortie tout seul :smiley:

:ane: :paf:

Dans un .h :


extern const char *pMethodsNames[];

Dans un .c :


typedef enum iType
{
     iSINGLEPOSITION  = 1,
     iSINGLECANDIDATE,
     iCANDIDATELINES,
     iDOUBLEPAIRS,
     iMULTIPLESLINES,
     iNAKEDMULTIPLES,
     iHIDDENMULTIPLES,
     iXWINGCOL,
     iXWINGROW,
     iSWORDFISHCOL,
     iSWORDFISHROW
};

// dans un fichier .h
// extern const char

const char *pMethodsNames[iSWORDFISHROW] = {
 "Single Position",
 "Single Candidate",
 "Candidate Lines",
 "Double Pairs",
 "Multiples Lines",
 "Naked Multiples",
 "Hidden Multiples",
 "X-Wing by Col.",
 "X-Wing by Row.",
 "Swordfish by Col.",
 "Swordfish by Row."
};

Super Karl, c’est tout à fait ce que je voulais!
:super: Un grand merci!

Je disais non à l’adage que les globals c’était le mal. C’est faux.

Bien utilisé ça permet d’éviter certains problèmes. Mais cela doit rester minime, et constant si possible.