# V3541. AUTOSAR. A function should not call itself either directly or indirectly.

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

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

Пример кода, на который анализатор выдаст предупреждения:

    #include <stdint.h>

    uint64_t factorial(uint64_t n)
    {
      return n > 1 ? n * factorial(n - 1) : 1;
    }

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

    #include <stdint.h>

    uint64_t factorial(uint64_t n)
    {
      uint64_t result = 1;
      for (; n > 1; --n)
      {
        result *= n;
      }

      return result;
    }

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

AUTOSAR-A7.5.1