Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V764. Possible incorrect order of...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V764. Possible incorrect order of arguments passed to function.

19 Июл 2016

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

Пусть имеется объявление функции следующего вида:

void SetRGB(unsigned r, unsigned g, unsigned b);

Пример ошибочного кода:

void Foo()
{
  unsigned R = 0, G = 0, B = 0; 
  ....
  SetRGB(R, B, G);
  ....
}

Во время задания цвета объекта, перепутали значения синего и зелёного цветов.

Исправленный вариант кода должен выглядеть следующим образом:

SetRGB(R, G, B);

Дополнительная настройка

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

Пример. Есть функция, семантически схожая с 'std::clamp', со следующей сигнатурой:

bool foo(int v, int lo, int hi);

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

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

if (foo(v, max, min))
{
  ....
}

Как мы видим, в вызове перепутаны местами аргументы для нижней и верхней границы. Тогда, чтобы получить срабатывание в месте вызова функции, необходимо разметить второй параметр функции foo как lower_bound, а третий как upper_bound. Также для дополнительной настройки диагностики V575 можно разметить первый параметр функции foo как in_range_value.

Исправленный код:

if (foo(x, min, max))
{
  ....
}

Примеры разметки параметров функций можно посмотреть здесь.

Примечание. Данная разметка необходима только для пользовательских функций.

Данная диагностика классифицируется как:

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V764.