Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V2565. MISRA. A function should not...
menu mobile close menu
Additional information
toggle menu Contents

V2565. MISRA. A function should not call itself either directly or indirectly.

Dec 18 2019

This diagnostic rule is based on the software development guidelines developed by MISRA (Motor Industry Software Reliability Association).

Functions should not call themselves either directly or indirectly. Recursion can lead to elusive bugs such as stack overflow in the case of very deep recursion.

Example of non-compliant code:

#include <stdint.h>

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

Recursive calls should be replaced with loops wherever possible. The following example demonstrates how this can be applied to the code above:

#include <stdint.h>

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

  return result;
}

This diagnostic is classified as:

  • MISRA-C-2012-17.2
  • MISRA-C-2023-17.2
  • MISRA-CPP-2008-7.5.4