Модель основных типов MISRA-C на самом деле не применима к битовым полям.Термины, более узкие и широкие, относятся к размеру в байтах (см. 8.10.2).Таким образом, не очевидно, должен ли статический анализатор предупреждать здесь или нет, поскольку правила для основного типа не обращаются к битовым полям.
РЕДАКТИРОВАТЬ: Я был не прав здесь, см.ответ Андрея.В Приложении D.4 рассказывается, как преобразовать тип битового поля в соответствующую категорию существенного типа.
Однако использование битовых полей в приложении MISRA-C - плохая идея.Битовые поля очень плохо определены стандартом и поэтому недетерминированы и ненадежны.Кроме того, MISRA-C 6.1 требует, чтобы вы документировали, как ваш компилятор поддерживает битовые поля с uint16_t
, поскольку это не один из стандартных целочисленных типов, разрешенных для битовых полей.
Но реальный прерыватель сделкиВот Директива 1.1, которая требует, чтобы все поведение, определяемое реализацией, было задокументировано и понято.Для реализации MISRA-C я однажды попытался задокументировать все аспекты реализации битовых полей.Вскоре я обнаружил, что пишу целое эссе, потому что с ними так много проблем. См. для вершины айсберга.
Обходной путь для того, чтобы не писать такую «книгу поведения битовых полей», - безоговорочно запретить использование битовых полей полностью в вашем стандарте кодирования.В любом случае, они на 100% лишние.Вместо этого используйте побитовые операторы.