exponenta event banner

Неиспользуемый параметр

Прототип функции имеет параметры, не считанные или записанные в теле функции

Описание

Этот дефект возникает, когда параметр функции не считывается и не записывается в тело функции. Средство проверки не помечает неиспользуемые параметры в функциях с пустыми телами.

Риск

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

Если скопированные объекты большие, избыточные копии могут снизить производительность.

Зафиксировать

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

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

Либо добавьте оператор, например (void)var; в теле функции. var является неиспользуемым параметром. Можно определить макрос, расширяющийся до этой инструкции, и добавить макрос в тело функции.

Примеры

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

void func(int* xptr, int* yptr, int flag) {
    if(flag==1) {
        *xptr=0;
    }
    else {
        *xptr=1;
    }
}

int main() {
    int x,y;
    func(&x,&y,1);
    return 0;
}

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

Коррекция - использовать параметр

Одной из возможных корректировок является проверка необходимости использования параметра. Исправьте код, если вы намереваетесь использовать параметр.

void func(int* xptr, int* yptr, int flag) {
    if(flag==1) {
        *xptr=0;
        *yptr=1;
    }
    else {
        *xptr=1;
        *yptr=0;
    }
}

int main() {
    int x,y;
    func(&x,&y,1);
    return 0;
}
Исправление - явно указать неиспользуемый параметр

Другой возможной поправкой является явное указание на то, что вы знаете о неиспользуемом параметре.

#define UNUSED(x) (void)x

void func(int* xptr, int* yptr, int flag) {
    UNUSED(yptr);
    if(flag==1) {
        *xptr=0;
    }
    else {
        *xptr=1;
    }
}

int main() {
    int x,y;
    func(&x,&y,1);
    return 0;
}

Информация о результатах

Группа: Надлежащая практика
Язык: C | C++
По умолчанию: Откл.
Синтаксис командной строки: UNUSED_PARAMETER
Воздействие: Низкий
Представлен в R2015b