On 5/9/05, Brian Barnes <email@hidden> wrote:
Turning on "'char' type is unsigned" and running this code:
char txt[256];
unsigned char txt2[256];
strcpy(txt,"abc");
strcpy(txt2,"abc");
gets you:
warning: pointer targets in passing argument 1 of 'strcpy' differ in
signedness
For the first line.
"-funsigned-char" is in the compile arguments. Once again, I'm using
-fast, this might be breaking it.
Though the message is a bit off, I'd argue that this is actually
correct. Even if 'char' is unsigned, it is still a type that is
distinct from 'unsigned char'. 'unsigned char*' is not implicitly
convert-able to 'char*'. In fact, the following code:
int main()
{
char *cp = 0;
unsigned char *ucp = 0;
signed char *scp = 0;
ucp = cp; //8
scp = cp; //9
cp = ucp; //10
cp = scp; //11
return 0;
}
Produces the following diagnostics when compiled with g++-4.0
(regardless of the signedness of plain char), and rightly so:
test.cpp: In function `int main()':
test.cpp:8: error: invalid conversion from 'char*' to 'unsigned char*'
test.cpp:9: error: invalid conversion from 'char*' to 'signed char*'
test.cpp:10: error: invalid conversion from 'unsigned char*' to 'char*'
test.cpp:11: error: invalid conversion from 'signed char*' to 'char*'