# V764. Possible incorrect order of arguments passed to function.

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

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

    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))
    {
      ....
    }

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

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

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

CWE-683 CERT-EXP37-C

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