2015-01-30 2 views
1

У меня есть C++ код, который содержит:Klocwork CWARN.SIGNEDBIT на неподписанные символ

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 is unsigned char typedef. Когда я пытаюсь использовать подписанный char, тогда я получаю сообщение об ошибке, а не предупреждение, как здесь. Использование unsigned int решает проблему, но я хочу использовать char.

Мой вопрос: Почему это предупреждение появляется и как его решить?

+0

Я предлагаю связаться с Klocwork и представить это как ошибку. В худшем случае они объяснят это и помогут вам решить проблему. –

ответ

0

Похоже, что это ошибка Klocwork 10, я добавлю это как исключение из тестового выхода. Спасибо за ответ

0

KlocWork может собирать здесь гниды.
Бит-поля должны быть целочисленного типа, а не типа символа.

Попробуйте объявить битовые поля как unsigned int.

Компилятор должен упаковать бит в наименьший тип данных, который может содержать все биты.

Проверьте список ассемблера, чтобы увидеть тип данных, который использует компилятор.

0

Эта проблема (FP) исправлена ​​на версии Klocwork 2017.1. Обновление Klocwork от v10 до v12 для проверки.