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

The analyzer has detected a suspicious sequence of arguments being passed to a function: some of the argument names do not match the expected parameter names\. It may indicate an error when passing values to the function\.

Here is the function declaration:

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

The example of incorrect code:

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

When setting the object color, the programmer accidentally swapped the blue and green color parameters\.

The fixed code version should look like this:

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

## Additional Settings

If the function accepts the boundaries of a range as parameters, the corresponding parameters can be marked as the lower and upper bounds\. If the argument order is violated during the function call, the corresponding warning can be issued\.

**The example**\. There is a function semantically similar to '[std::clamp](https://en.cppreference.com/w/cpp/algorithm/clamp)' with the following signature:

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

This function checks that the value of the first parameter lies within the range provided by the second \(lower bound\) and third \(upper bound\) parameters\.

Let's say there is the following function call:

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

The arguments for the lower and upper bounds are swapped\. To get the warning on the function call, mark the second parameter of the `foo` function as `lower_bound` and the third as `upper_bound`\. For additional configuration of the [V575](https://pvs-studio.com/en/docs/warnings/v575/) diagnostic rule, mark the first parameter of the `foo` function as `in_range_value`\.

The fixed code:

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

See the examples of function parameter annotations [here](https://pvs-studio.com/en/docs/manual/6743/#examples)\.

**Note**\. This annotation is required only for user\-defined functions\.