MISRA C++:2008 Rule 0-1-7

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

Описание

Управляйте определением

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

Объяснение

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

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

Реализация Polyspace

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

Средство проверки не отмечает функции memcpy, memset, memmove, strcpy, strncpystrcat, 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