I have the following struct:
struct holder {
int cause;
int agent:1, group:1, supervisor:1, defer:1;
};
Klocwork complains at the int agent:1 ... line saying: Bit field 'agent' has one bit and is signed. Signed one bit field, CWARN.SIGNEDBIT.
I don't understand why the integer being signed would make any difference. I realise that for a signed integer the leftmost (most significant) bit is used to determine whether integer is positive or negative but in case of bit fields that surely wouldn't matter???
Klocwork developer web site says:
Signed bitfields require at least two bits, and the two possible values of the field are -1 and 0. Although it is safe to check a 1-bit signed bitfield for 0, using it as a Boolean flag, other arithmetic operations may yield unexpected results.
Can someone please explain why integer must be unsigned in this case?
int
in deterministic and universal terms, in other words you can't assume that the size ofint
is N bits b) C doesn't define endianess, you can't assume any particular representation for theint
data type. 3) do yourself a favor and go for a good book or drop this really bad idea about bitfields . – user2485710int
you don't go for the bitfields, you are shooting yourself in the foot, both foots, the entire body. bitfields can be involved in all kinds of issues, from the standard related definitions to the ABIs. – user2485710union
are, but I don't know how far you can go if you assume that the C standard gives you a fixed size forint
with an endianess defined. – user2485710