Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Merci par avance,
JKB
Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Merci par avance,
JKB
Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Merci par avance,
JKB
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
JKB wrote:Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
JKB wrote:
Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
JKB wrote:Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsigned
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
Le 26-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
JKB wrote:Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
Oui bon, j'ai fait ce test sur un coin de table. Comment ai-je pu
laisser passer ça ?#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsign ed
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
Le 26-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
JKB wrote:
Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
Oui bon, j'ai fait ce test sur un coin de table. Comment ai-je pu
laisser passer ça ?
#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsign ed
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
Le 26-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
JKB wrote:Bonjour à tous,
Je suis en train de tester gcc 4.0 et j'ai un gros doute.
Considérons le programme suivant :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int
main()
{
unsigned char *chaine;
strcpy(chaine, "chaine");
Pointeur vers char non signé chaine non alloué, pas bien.
Oui bon, j'ai fait ce test sur un coin de table. Comment ai-je pu
laisser passer ça ?#define LG 20u
unsigned char chaine[LG+1];
char * src_cs = "chaine";
if (strlen(src_cs) <= LG) { strcpy(chaine, src_cs); }
/* Exprès pour faire plaisir à Charlie, pas de strncpy :-D */
#undef LG
return(EXIT_SUCCESS);
}
En compilant avec :
gcc -Wall essai.c
j'obtiens :
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Ce que je peux comprendre. Or il existe une option -funsigned-char
qui est censé forcer toutes les chaînes de caractères en unsign ed
char. Soit...
-Wall -funsigned-char essai.c
essai.c: In function 'main':
essai.c:9: warning: pointer targets in passing argument 1 of 'strcpy'
differ in signedness
Est-ce que j'ai raté quelque chose ? Ou est-ce un bug dans gcc
(4.0.2 debian) ? J'ai cherché sur le site de gcc et sur usenet sans
succès...
Pas d'idées à part celles-ci :
- s'assurer que l'option -funsigned-char est bien de portée globale,
ce qui doit être le cas.
- Je ne sais pas comment l'option -funsigned-char affecte la
compilation, mais si c'est un genre de typecast de char vers unsigned
char de toutes les variables typées, le pb pourrait venir du fait que
"chaine", en dur dans ton strcpy, ne soit pas affectée par l'option
-funsigned-char, car c'est une chaine litérale (constante). Ses
éléments sont de type char (d'après ma draft de norme (C99),
$6.4.5).
En fait, si je déclare deux chaînes en unsigned char * et que je
fais un strcpy(chaine_1, chaine_2), je me fais toujours insulter...
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
gcc-3.4 ne sort aucun warning. Est-il possible de faire comprendre
au compilo qu'il doit ne pas afficher les warnings correspondant à
ça ? Du style -Wall -fno quelque chose, mais je n'ai pas trouvé :-(
Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
gcc-3.4 ne sort aucun warning. Est-il possible de faire comprendre
au compilo qu'il doit ne pas afficher les warnings correspondant à
ça ? Du style -Wall -fno quelque chose, mais je n'ai pas trouvé :-(
Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
gcc-3.4 ne sort aucun warning. Est-il possible de faire comprendre
au compilo qu'il doit ne pas afficher les warnings correspondant à
ça ? Du style -Wall -fno quelque chose, mais je n'ai pas trouvé :-(
JKB wrote:Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
Je ne comprend pas bien : le type char est le type char, pas signed
char. Il a souvent par défaut la même représentation qu'un signed
char, mais si avec gcc tu utilises l'option -funsigned-char, alors la
repésentation des variables typées en char sera la même que les
unsigned char, où est le problème ?
JKB wrote:
Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
Je ne comprend pas bien : le type char est le type char, pas signed
char. Il a souvent par défaut la même représentation qu'un signed
char, mais si avec gcc tu utilises l'option -funsigned-char, alors la
repésentation des variables typées en char sera la même que les
unsigned char, où est le problème ?
JKB wrote:Le 27-10-2005, à propos de
Re: gcc 4.0 et unsigned char,
Targeur fou écrivait dans fr.comp.lang.c :
Oui, c'est normal, strcpy() prend des char * en paramètre, pas des
unsigned char *. -funsigned-char, comme l'a expliqué Antoine, permet
D'INTERPRETER le signe du type char, i.e, sa représentation sera la
même que celle d'un unsigned char. Et je me suis aussi mépris sur le
sujet comme toi. Ce n'est donc pas un typecast ou un typedef
quelconque, i.e les types char et unsigned char sont bien
distincts...comme en temps normal.
C'est finalement une option assez piégeuse. T'as plusieurs solutions :
- ne pas utiliser cette option et expliciter le typage des variables
(je fais ça)
- utiliser cette option pour choisir une représentation non signée de
toutes les variables typées en char, pourquoi pas...
J'ai une question à mon tour : pourquoi types-tu ta chaine de
caractère en unsigned char * et pas en char * tout simplement ?
Parce que j'ai des passages de paramètres (de chaînes) vers des
routines Fortran et que le signed char me pose des problèmes sur
certaines architectures ésotériques.
Je ne comprend pas bien : le type char est le type char, pas signed
char. Il a souvent par défaut la même représentation qu'un signed
char, mais si avec gcc tu utilises l'option -funsigned-char, alors la
repésentation des variables typées en char sera la même que les
unsigned char, où est le problème ?
À force de chercher, j'ai trouvé :
-Wall -funsigned-char -Wno-pointer-sign
qui résout mon problème.
À force de chercher, j'ai trouvé :
-Wall -funsigned-char -Wno-pointer-sign
qui résout mon problème.
À force de chercher, j'ai trouvé :
-Wall -funsigned-char -Wno-pointer-sign
qui résout mon problème.
Attention, il y a un piège... :-)
Attention, il y a un piège... :-)
Attention, il y a un piège... :-)