exponenta event banner

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

Результат оператора назначения не должен использоваться

Описание

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

Не следует использовать результат оператора назначения.

Объяснение

Правило нарушается, если в той же строке кода происходит следующее:

  • Оператор назначения действует на переменную.

  • Для результата назначения выполняется другое считывание или операция.

Например, линия a[x]=a[x=y]; нарушает это правило. [] оператор действует по результатам присвоения x=y.

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

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

Примеры

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

int x, y, b, c, d;
int a[10];
unsigned int bool_var, false=0, true=1;

int foo(void) {

    x = y;            /* Compliant - x is not used */

    a[x] = a[x = y];  /* Non-compliant - Value of x=y is used */

    if ( bool_var = false )/* Non-compliant - bool_var=false is used */
{}


    if ( bool_var == false ) {}   /* Compliant */

    if ( ( 0u == 0u ) || ( bool_var = true ) )/* Non-compliant */
                    /*- even though (bool_var=true) is not evaluated */
 {} 
    

    if ( ( x = f () ) != 0 )/* Non-compliant - value of x=f() is used */
 {} 
    a[b += c] = a[b];/* Non-compliant - value of b += c is used */
    b = c = d = 0; /* Non-compliant - value of d=0 and c=d=0 are used */

}

В этом примере правило нарушается при использовании результата назначения.

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

Группа: Побочные эффекты
Категория: Консультационные услуги
СМЖЛ Категория: Консультативные услуги
Представлен в R2014b