﻿# V1108\. Constraint specified in a custom function annotation on the parameter is violated\.

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

Механизм [пользовательских аннотаций](https://pvs-studio.ru/ru/docs/manual/6743/) в формате JSON позволяет предоставить анализатору больше информации о типах и функциях\. В том числе, позволяет установить ограничения на параметры аннотируемой функции\.

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

```cpp
{
  "version": 1,
  "annotations": [
    {
      "type": "function",
      "name": "my_constrained_function",
      "params": [
        {
          "type": "int",
          "constraint": {
            "disallowed": [ "..0" ]
          }
        }
      ]
    }
  ]
}
```

При подключении файла с такой аннотацией на следующем коде появится срабатывание V1108:

```cpp
void my_constrained_function(int);

void caller(int i)
{
  if (i < 0)
  {
    return;
  }

  my_constrained_function(i); // <=
}
```

В данном случае программист совершил ошибку — перепутал оператор '<' с оператором '<\='\. Однако благодаря ограничениям в аннотации анализатор знает, что в функцию 'my\_constrained\_function' не должны передаваться отрицательные значения или ноль\.

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

```cpp
void my_constrained_function(int);

void caller(int i)
{
  if (i <= 0)
  {
    return;
  }

  my_constrained_function(i);
}
```