я имею Код C ++ который содержит:
struct Struct
{
uint8_t varA : 1;
uint8_t varB : 1;
uint8_t varC : 1;
};
Когда я бегу Klocwork 10 на этом я получаю предупреждение:
CWARN.SIGNEDBIT (4:Review) Analyze
Bit field 'varA' has one bit and is signed
И то же самое для других переменных в этой структуре.
uint8_t — беззнаковый тип. Когда я пытаюсь использовать подписанный символ тогда я получаю ошибку, а не предупреждение, как здесь. С помощью без знака int решает проблему, но я хочу использовать голец вместо.
Мой вопрос здесь: почему появляется это предупреждение и как его решить?
KlocWork может ковыряться здесь.
Битовые поля должны быть целочисленного типа, а не символьного типа.
Попробуйте объявить битовые поля как unsigned int.
Компилятор должен упаковать биты в наименьший тип данных, который может содержать все биты.
Проверьте список языков ассемблера, чтобы увидеть тип данных, который использует компилятор.
Похоже, что это ошибка Klocwork 10, я добавлю это как исключение к результатам теста. Спасибо за ответ
Эта проблема (FP) была исправлена в версии Klocwork 2017.1.
Обновите Klocwork с версии 10 до версии 12 для проверки.