Правило MISRA нацелено на тот факт, что C не определяет точный размер, диапазон или представление его стандартных целочисленных типов.Заголовок stdint.h
устраняет эту проблему, предоставляя несколько семейств typedefs , выражающих поддерживаемые реализацией целочисленные типы, которые предоставляют конкретные комбинации подписи, размера и представления.Каждая реализация C предоставляет заголовок stdint.h
, соответствующий этой реализации.
Вы должны соблюдать правило MISRA, используя типы, определенные в заголовке stdint.h
вашей реализации, выбирая типы, которые соответствуют вашим потребностям, из числаон на самом деле поддерживает (или тех, кого вы ожидаете, чтобы поддержать).Например, если вы хотите, чтобы целочисленный тип со знаком ровно в 32 бита, без битов заполнения и выражался в представлении дополнения до двух, то это int32_t
- если ваша реализация обеспечивает это вообще (это было бы удивительно, но неневозможно, поскольку такой тип недоступен).
Например,
#include <stdint.h>
// relies on the 'int32_t' definition from the above header:
static int32_t handlerCalled = 0;
В моем комментарии я поднял вопрос о том, что вы, казалось, говорили, что вы не только включилизаголовок, но также определен ваш собственный typedef для uint32_t
. Вы не должны определять свой собственный typedef для этого или других типов в области действия stdint.h
.В лучшем случае это избыточно, но в худшем случае оно удовлетворяет программе проверки MISRA, но нарушает ваш код.