MISRA2004 требует использования стандарта C89 (правило 1.1
обязательное). Я до него пока не дошёл (вернее дошёл, но там
столько ошибок вылезает, что я опух слегка). Так что о типе bool придётся забыть. Если я правильно понимаю мисру, то конструкцию if (var) { она пропустит (правило 12.6 обязательное), только если var имеет логический тип (хотя в примере к правилу 16.9 даётся пример
корректного кода if( func() ) {}). Тут непонятно, т.к. логического типа нет. Вроде где-то видел рекомендацию сравнивать прямо с получением логического результата
if ( 0 == var ) {}
, но где не помню. Т.е. вот такой код мисру устраивает
typedef enum
{
FALSE,
TRUE
} bool_TypeDef;
bool_TypeDef done;
/* Send the string character by character on LCD */
do {
<..>
} while ( FALSE == done );