From: groepaz (groepaz_at_gmx.net)
Date: 2002-07-18 19:14:20
Hello Ullrich,
Thursday, July 18, 2002, 4:54:31 PM, you wrote:
UvB> Hi!
UvB> On Thu, Jul 18, 2002 at 04:05:03PM +0200, groepaz wrote:
>> look at this, problem is a case value of "0x8000" (min_int) used in a
>> switch statement where the switch is done by a signed int.
UvB> Ok, I've checked the standard and it says that integer promotions on the
UvB> controlling variable should be applied. This would mean that the compiler does
UvB> indeed behave incorrectly - it should convert the variable i instead of
UvB> complaining.
yeah thought so.... i was surprised actually that it didnt work like
this (i used turbo-c 2.0 for cross checking -coz it has 16bit ints-
and it worked there)
UvB> I have to admit that I'm not happy about this. The code is unclean, and doing
UvB> a type conversion on i for each label that does not have the same type
UvB> introduces quite some overhead under the hood. But then, the standard is the
UvB> standard is the standard...:-)
hehe indeed :o)
UvB> Thanks for the report, I will see what I can do about it.
maybe i should tell what i was doing, so its clear why i am actually
complaining.... i was doing (working on filesystem ;=P) a function
like...
#define flag1 0x8000
#define flag2 0x4000
#define parm1 flag1
#define parm2 (flag2|flag1)
int foo(int parm){
switch(parm){
case parm1:
break;
case parm2:
break;
}
}
.... i guess you can see where the problem lies... that is, the
function in question MUST take an int (standard..hello! :o)) (it would
have worked with unsigned int or short without problem) although the
parameter-values are basically constructed "typeless" (or call it
bitfield or whatever). ofcoz in this case i could have dealt with that
myself (convert to unsigned before manually etc) but i guess it can
easily lead into more problems with existing code. (using 16bit-ints
as bitfields like this is probably not very uncommen across old dos code and
alike)
however, theres another sweetie:
if( ".\"."[1] != '"' ) printf("fixme!");
:=P
btw there seems to be a problem with promoting ints to longs
aswell.... ;/ (gotta come up with testcode ;=P)
--
Best regards,
groepaz mailto:groepaz_at_gmx.net
----------------------------------------------------------------------
To unsubscribe from the list send mail to majordomo_at_musoftware.de with
the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2002-07-18 19:14:43 CEST