Предположим, у меня есть
typedef struct {
unsigned short bar : 1;
} foo_bf;
typedef union {
unsigned short val;
foo_bf bf;
} foo_t;
Как мне правильно присвоить значение этому битовому полю из типа, например, uint16_t?
uint16_t myValue = 1;
foo_t foo;
foo.bf.bar = myValue
При запуске PC-Lint возникает ошибка MISRA: Выражение назначено более узкому или другому основному типу.
Я безуспешно пытался ограничить количество используемых битов.
foo.bf.bar = (myValue 0x1U)
Есть ли шанс сделать его совместимым с MISRA, если мне придется использовать значение uint16_t в качестве источника?
myValue
в_Bool
? Если это не сработает, возможно, вам придется жить с предупреждением. - person Shawn   schedule 21.09.2018if (myValue) myFoo.bar = 1; else myFoo.bar = 0;
при условии, чтоfoo_bf myFoo
, и мусорfoo_t
- person user3386109   schedule 21.09.2018foo.bf.bar = (unsigned short) myValue;
- person Sander De Dycker   schedule 21.09.2018