Question en C : Warning à la con - Programmation
Marsh Posté le 01-12-2001 à 15:21:51
tu le declare ou ta structure ?
essaie de faire char name;
sans le pointeur
Marsh Posté le 01-12-2001 à 15:27:48
skylight a écrit a écrit : tu le declare ou ta structure ? essaie de faire char name; sans le pointeur |
Ba tu la vois bien la déclaration :
static struct cname {
char *name;
char code;
}
Heu char name, c'est franchement pas une bonne idée sachant que ca comporte plusieurs caractères
Si tu veux faire raler le compilo c'est la meilleur solution
Marsh Posté le 01-12-2001 à 15:33:00
crétaing
L'option de warning qui crée ca c'est :
-Wwrite-strings
Marsh Posté le 01-12-2001 à 15:35:34
ethernal a écrit a écrit : gcc --disable-warning prog dsl |
wesh wesh il a dit "propre"
joce > bah voui mais bon t ptet pas obliged d'utiliser les pointeurs moi ils me font chier + qu'autre chose alors je les utilise le moins possible (sauf poor les tableaux, pas le choix )
Marsh Posté le 01-12-2001 à 15:35:57
oki j'ai compris, fallait mettre :
static struc cname {
const char *name;
char code;
}
Marsh Posté le 01-12-2001 à 15:36:56
tu sais pas quelle version de gcc t'a ?
paske moi a l'école on a une version buggée ....
genre
int N=1;
int Tablo[N];
et là, prootch, gcc t'envoie une grosse erreur pask'il veu pa ke tu déklare un tablo de dimension dynamique ...
Marsh Posté le 01-12-2001 à 15:37:27
skylight a écrit a écrit : wesh wesh il a dit "propre" joce > bah voui mais bon t ptet pas obliged d'utiliser les pointeurs moi ils me font chier + qu'autre chose alors je les utilise le moins possible (sauf poor les tableaux, pas le choix ) |
oui mais dans le cas d'une string, t un peu obliged, surtout dans ce cas là.
Sinon c'est sur j'aurais pu toujours faire :
char name[] = "gnagna";
mais là c'est pas possible.
Et puis si t'evites les pointeurs, arrète la programmation
Marsh Posté le 01-12-2001 à 15:37:28
joce a écrit a écrit : oki j'ai compris, fallait mettre : static struc cname { const char *name; char code; } |
pkoi une constante ca virerais les warning ?
Marsh Posté le 01-12-2001 à 15:38:12
Parce que :
-Wwrite-strings
Give string constants the type const char[length] so that copying the address of one into a non-const
char * pointer will get a warning. These warnings will help you find at compile time code that can try
to write into a string constant, but only if you have been very careful about using const in declara
tions and prototypes. Otherwise, it will just be a nuisance; this is why we did not make `-Wall' re
quest these warnings.
Marsh Posté le 01-12-2001 à 15:47:16
skylight a écrit a écrit : wesh wesh il a dit "propre" joce > bah voui mais bon t ptet pas obliged d'utiliser les pointeurs moi ils me font chier + qu'autre chose alors je les utilise le moins possible (sauf poor les tableaux, pas le choix ) |
surtout jamais les utiliser c pas bien
Marsh Posté le 01-12-2001 à 15:50:37
deathsharp a écrit a écrit : surtout jamais les utiliser c pas bien |
Marsh Posté le 01-12-2001 à 19:10:14
skylight a écrit a écrit : tu sais pas quelle version de gcc t'a ? paske moi a l'école on a une version buggée .... genre int N=1; int Tablo[N]; et là, prootch, gcc t'envoie une grosse erreur pask'il veu pa ke tu déklare un tablo de dimension dynamique ... |
qui est le plus buggué, du compilo ou de l'utilisateur, on se demande ...
aller tente donc un const int N=1 pour avoir une idée de la réponse
Marsh Posté le 01-12-2001 à 19:32:27
mais si je declare N comme constante .. je poorai pas lui assigner une valeur par la suite ?
Marsh Posté le 01-12-2001 à 19:38:15
skylight a écrit a écrit : mais si je declare N comme constante .. je poorai pas lui assigner une valeur par la suite ? |
oui, si tu récupère son adresse mémoire et que tu écrit dedans via une autre variable qui pointe sur l'adresse mémoire.
Mais c'est une astucede programmeur-porc et a éviter au maximum. Si tu veux déclarer un char dynamique. déclar un pointeur char et ensuite tu lui appliques un malloc.
Marsh Posté le 01-12-2001 à 19:41:18
gizmo a écrit a écrit : oui, si tu récupère son adresse mémoire et que tu écrit dedans via une autre variable qui pointe sur l'adresse mémoire. Mais c'est une astucede programmeur-porc et a éviter au maximum. Si tu veux déclarer un char dynamique. déclar un pointeur char et ensuite tu lui appliques un malloc. |
M'étonnerait qu'un bon compilo laisse passer ça, il me semble que au moins VC++ remplace les const par leur valeur comme des define, je peux me tromper m'enfin j'espere que c'est ça ...
Marsh Posté le 01-12-2001 à 19:55:26
skylight a écrit a écrit : mais si je declare N comme constante .. je poorai pas lui assigner une valeur par la suite ? |
toi ta louper bcp de truc dans la programmtion g l'impression...
Marsh Posté le 01-12-2001 à 20:24:24
t'aurais pas oublier un ; a la fin de ta structure
struct ... {
};
Marsh Posté le 01-12-2001 à 20:44:06
deathsharp a écrit a écrit : toi ta louper bcp de truc dans la programmtion g l'impression... |
g commencé le C ya 2 mois ... soit indulgent kan meme
Marsh Posté le 01-12-2001 à 20:46:28
K
revoie les pointeurs, si t'arrive pas ou ke t'aime pas ca risque d'etre cho...
bonne chance pour la suite
Marsh Posté le 24-12-2001 à 15:23:31
deathsharp a écrit a écrit : K revoie les pointeurs, si t'arrive pas ou ke t'aime pas ca risque d'etre cho... bonne chance pour la suite |
t'as entendu sky, revoie tes pointeurs
Marsh Posté le 24-12-2001 à 19:54:31
joce a écrit a écrit : t'as entendu sky, revoie tes pointeurs |
pffffff meme pa drole
Marsh Posté le 25-12-2001 à 16:27:01
joce a écrit a écrit : t'as entendu sky, revoie tes pointeurs |
fait pas semblant de pas comprendre...
Marsh Posté le 25-12-2001 à 16:31:32
deathsharp a écrit a écrit : fait pas semblant de pas comprendre... |
nan c'est pas pour ca, c'est parce que l'autre jour y m'avait sorti sur ICQ qu'il faisait tout pour pas les utiliser parce que ct trop le bordel
Marsh Posté le 01-12-2001 à 15:16:59
J'ai la fonction suivante :
/* character-name table */
static struct cname {
char *name;
char code;
} cnames[] = {
{"NUL", '\0'},
{"SOH", '\001'},
{"STX", '\002'},
{"ETX", '\003'},
{"EOT", '\004'},
{"ENQ", '\005'},
{"ACK", '\006'},
{"BEL", '\007'},
{"alert", '\007'},
{"BS", '\010'},
{"backspace", '\b'},
{"HT", '\011'},
{"tab", '\t'},
{"LF", '\012'},
{"newline", '\n'},
{"VT", '\013'},
{"vertical-tab",'\v'},
{"FF", '\014'},
{"form-feed", '\f'},
{"CR", '\015'},
{"carriage-return", '\r'},
{"SO", '\016'},
{"SI", '\017'},
{"DLE", '\020'},
{"DC1", '\021'},
{"DC2", '\022'},
{"DC3", '\023'},
{"DC4", '\024'},
{"NAK", '\025'},
{"SYN", '\026'},
{"ETB", '\027'},
{"CAN", '\030'},
{"EM", '\031'},
{"SUB", '\032'},
{"ESC", '\033'},
{"IS4", '\034'},
{"FS", '\034'},
{"IS3", '\035'},
{"GS", '\035'},
{"IS2", '\036'},
{"RS", '\036'},
{"IS1", '\037'},
{"US", '\037'},
{"space", ' '},
{"exclamation-mark", '!'},
{"quotation-mark", '"'},
{"number-sign", '#'},
{"dollar-sign", '$'},
{"percent-sign", '%'},
{"ampersand", '&'},
{"apostrophe", '\''},
{"left-parenthesis", '('},
{"right-parenthesis", ''},
{"asterisk", '*'},
{"plus-sign", '+'},
{"comma", ','},
{"hyphen", '-'},
{"hyphen-minus", '-'},
{"period", '.'},
{"full-stop", '.'},
{"slash", '/'},
{"solidus", '/'},
{"zero", '0'},
{"one", '1'},
{"two", '2'},
{"three", '3'},
{"four", '4'},
{"five", '5'},
{"six", '6'},
{"seven", '7'},
{"eight", '8'},
{"nine", '9'},
{"colon", ':'},
{"semicolon", ';'},
{"less-than-sign", '<'},
{"equals-sign", '='},
{"greater-than-sign", '>'},
{"question-mark", '?'},
{"commercial-at", '@'},
{"left-square-bracket", '['},
{"backslash", '\\'},
{"reverse-solidus", '\\'},
{"right-square-bracket",']'},
{"circumflex", '^'},
{"circumflex-accent", '^'},
{"underscore", '_'},
{"low-line", '_'},
{"grave-accent", '`'},
{"left-brace", '{'},
{"left-curly-bracket", '{'},
{"vertical-line", '|'},
{"right-brace", '}'},
{"right-curly-bracket", '}'},
{"tilde", '~'},
{"DEL", '\177'},
{NULL, 0},
};
A la compil, gcc m'envoie :
cname.h:6: warning: initialization discards qualifiers from pointer target type
cname.h:7: warning: initialization discards qualifiers from pointer target type
cname.h:8: warning: initialization discards qualifiers from pointer target type
cname.h:9: warning: initialization discards qualifiers from pointer target type
cname.h:10: warning: initialization discards qualifiers from pointer target type
cname.h:11: warning: initialization discards qualifiers from pointer target type
<cut>
Une idée de comment faire ca de manière propre pour dégager le warning qui me dérange un peu ?
---------------
Protèges carnets personnalisés & accessoires pour bébé