c - How to fill bitfields with 0xff -
is there way initialize unsigned field in bitfield 0xfff...(according its' size ofcourse) ? if use -1 warning assigning signed unsigned variable.
one solution manually create init values in enum , use them:
enum init_bit { // etc i_3 = 7u, // use longer names because global space i_4 = 15u, i_5 = 31u, // etc }; you write once , becomes easy:
x x = {/*other fields*/, i_4, /*other fields*/}; another solution found init 0 , decrement. defined because dealing unsigned type. if need initialize can create function this:
x get_x() { x x; x.a = 0; --x.a; return x; } with optimizations enable compiler direct initialize:
get_x: movl $15, %eax ret you can use function initialization:
x x = get_x(); of course has disadvantage need init other fields of x in get_x.
where x defined as:
struct x { unsigned : 4; }; typedef struct x x; it seems tricky initialize bit fields without warnings (gcc 6.1):
x x = {-1}; //!!warning: negative integer implicitly converted unsigned type [-wsign-conversion] x x = {-1u}; //!!warning: large integer implicitly truncated unsigned type [-woverflow] x x = {(unsigned)-1}; //!!warning: large integer implicitly truncated unsigned type [-woverflow] x x = {~0}; //!!warning: negative integer implicitly converted unsigned type [-wsign-conversion] x x = {~0u}; //!!warning: large integer implicitly truncated unsigned type [-woverflow]
Comments
Post a Comment