Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
implicitly cast
#1
According to source code below, please kindly help me to clear understanding whether where are the implicitly cast and they will cast to what type?

Warning: Unsuffixed integral literal implicitly cast to another type.


Source code
struct {
unsigned char multiple: 1;
unsigned char event: 1;
unsigned char checksum: 1;
unsigned char conditional: 1;
} flag;
...

void transmit(void)
{
…
if (flag.conditional == 1) { [color=red][b]
<t></t>
Reply
#2
[quote="warawut"]...

if (flag.conditional == 1) { [color=red][b]
<t></t>
Reply
#3
and by using unsigned char in a bit field you are also violating rule 6.4
<t></t>
Reply
#4
In C90 this code is making use of an extension (in C99 it is implementation-defined behavior; sentence 1385 http://c0x.coding-guidelines.com/6.7.2.1.html).

I am guessing that the tool performing the check is not handling the semantics correctly. Even if unsigned char had the same size as unsigned int, the bit-field member would be promoted to type int (not unsigned int; sentence 669 http://c0x.coding-guidelines.com/6.3.1.1.html).

I would complain to the tool vendor that they are incorrectly flagging this construct.
<r>Applications conformance testing: <URL url="http://www.knosof.co.uk/cbook">http://www.knosof.co.uk/cbook</URL></r>
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)