MISRA ругается потому что для безопасности они не рекомендуют
пользоваться обще-генеральными типами int, long итд. Какую длину в
байтах будут иметь эти типы зачастую предсказать тяжело и это ведет
к ошибкам. Вместо этого они рекомендуют пользоваться встроенными
типами у которых в точности известен размер: <inttypes.h> Именно это утилита проверки MISRA-правил и пишет:
The basic types of char, int, short, long, float, and double should not be used, but specific-length equivalents should be typedef'd for the specific compiler, and these type names used in the code
В самом языке C, начиная с его версии C99 существует встроенный прям в язык тип _Bool (то есть никаких определений типа или включать другие файлы (заголовки) не надо. Но вот какая проблема, по стандарту языка, тип _Bool не гарантируется что будет иметь определенный размер в байтах. Обычно в 99% случаев он имеет размер 1 байт. Но гарантий этого по стандарту C99 нет. Вот поэтому MISRA на него и шипит. Либо на его производные, во включаемом файле <stdbool.h> находится простое макро, которое потом разворнет все bool в _Bool а также дял удобства восприятия содержит true и false.
Теперь что касается наворачивания своих самопальных boolean-типов. Не всё так просто и вот почему. Вот это:
unsigned char var = 256;
if (var) {
}
закончится тем что var будет (0) false и код внутри if не выполнится. А вот это:
_Bool var = 256;
if (var) {
}
приведет к выполнению кода внутри if.
Таким же образом код:
_Bool a = 3, b = 4;
if (a == b) {
}
Считает что булева a равна b и код внутри if выполнится.
Икусственные подмены _Bool будут вести себя иначе и с ними можно хлебнуть горюшка.