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

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

Механизм пользовательских аннотаций в формате JSON позволяет предоставить анализатору больше информации о типах и функциях. В том числе, позволяет установить ограничения на параметры аннотируемой функции.

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

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

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

    void my_constrained_function(int);

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

      my_constrained_function(i); // <=
    }

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

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

    void my_constrained_function(int);

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

      my_constrained_function(i);
    }