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

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

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

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

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

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

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

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

```cpp
SetRGB(R, G, B);
```

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

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

**Пример\. **Есть функция, семантически схожая с '[std::clamp](https://en.cppreference.com/w/cpp/algorithm/clamp)', со следующей сигнатурой:

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

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

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

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

Как мы видим, в вызове перепутаны местами аргументы для нижней и верхней границы\. Тогда, чтобы получить срабатывание в месте вызова функции, необходимо разметить второй параметр функции `foo` как `lower_bound`, а третий как `upper_bound`\. Также для дополнительной настройки диагностики [V575](https://pvs-studio.ru/ru/docs/warnings/v575/) можно разметить первый параметр функции `foo` как `in_range_value`\.

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

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

Примеры разметки параметров функций можно посмотреть [здесь](https://pvs-studio.ru/ru/docs/manual/6743/#examples)\.

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