exponenta event banner

MISRA C++: Правило 2008 0-1-7

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

Описание

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

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

Объяснение

Неиспользованное возвращаемое значение может указывать на ошибку кодирования или недосмотр.

Перегруженные операторы исключены из этого правила, так как их использование должно эмулировать встроенные операторы, которые могут не использовать их возвращаемое значение.

Внедрение Polyspace

Флажки средства проверки работают с функциями, не являющимисяvoid возвращает, если возвращаемое значение не используется или явно не приводится к void тип.

Средство проверки не помечает функции memcpy, memset, memmove, strcpy, strncpy, strcat, strncat потому что эти функции просто возвращают указатель на свои первые аргументы.

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

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

Примеры

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

#include <iostream>
#include <new>

int assignMemory(int * ptr){
     int res = 1;
     ptr = new (std::nothrow) int;
     if(ptr==NULL) {
         res = 0;
     }
     return res;
}

void main() {
    int val;
    int status;
    
    assignMemory(&val);   //Noncompliant
    status = assignMemory(&val); //Compliant
    (void)assignMemory(&val); //Compliant
    
}

Первый вызов функции assignMemory не соответствует, так как возвращаемое значение не используется. Второй и третий вызовы используют возвращаемое значение. Возвращаемое значение из второго вызова назначается локальной переменной.

Возвращаемое значение из третьего вызова приводится к void. Отливка в void указывает на преднамеренное неиспользование возвращаемого значения и не может являться надзором за кодированием.

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

Группа: Вопросы, не зависящие от языка
Категория: Обязательно
Представлен в R2013b