exponenta event banner

MISRA C:2012 Правило 14.4

Управляющее выражение оператора if и управляющее выражение оператора итерации должны иметь по существу логический тип

Описание

Определение правила

Управляющее выражение оператора if и управляющее выражение оператора итерации должны иметь по существу логический тип

Объяснение

Для строгой типизации требуется управляющее выражение в if оператор или оператор итерации должен иметь логический тип.

Внедрение Polyspace

Например, Polyspace ® не помечает целочисленные константы if(2).

Анализ распознает логические типы, bool или _Bool (определено в stdbool.h)

С помощью опции можно также определить типы, которые по существу являются логическими. Effective boolean types (-boolean-types).

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

развернуть все

#include <stdbool.h>
#include <stdlib.h>

#define TRUE 1

typedef _Bool bool_t;
extern bool_t flag;

void foo(void){
    int *p = 1;
    int *q = 0;
    int i = 0;
    while(p){}           /* Non-compliant - p is a pointer */

    while(q != NULL){}   /* Compliant */

    while(TRUE){}        /* Compliant */

    while(flag){}        /* Compliant */

    if(i){}              /* Non-compliant - int32_t is not boolean */

    if(i != 0){}         /* Compliant */

    for(int i=-10; i;i++){}   /* Non-compliant - int32_t is not boolean */

    for(int i=0; i<10;i++){}  /* Compliant */
}

В этом примере показаны различные управляющие выражения в while, if, и for заявления.

Несоответствующие утверждения (первые while, if, и for примеры), используйте одну ненулевую переменную. Если в качестве управляющей инструкции используется одна переменная, она должна быть по существу логической (строки 17 и 19). Логические выражения также совместимы с MISRA ®.

Проверить информацию

Группа: Выражения управляющих операторов
Категория: Обязательно
СМЖЛ Категория: Консультативные услуги