MISRA C++:2008 Rule 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