# V2636. MISRA. The functions with the 'rand' and 'srand' name of <stdlib.h> should not be used.

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

Правило актуально только для языка C.

Функции `rand` и `srand` из заголовочного файла `<stdlib.h>` не должны быть использованы. Ни один макрос с одним из этих имен не должен быть использован.

Функции `srand` и `rand` используются для работы с генератором псевдослучайных чисел. Первая функция инициализирует его начальным значением, а вторая генерирует псевдослучайное число.

Однако у этого функционала есть серьёзный недостаток: он не гарантирует качество псевдослучайной последовательности чисел. Поэтому данный функционал из заголовочного файла `<stdlib.h>` не рекомендуется использовать для серьёзных задач, связанных с использованием псевдослучайных чисел.

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

    int foo()
    {
      srand(time(NULL));
      int random_variable = rand();
    }

Также анализатор будет выдавать предупреждения на использование макросов с соответствующими именами:

    #define srand printf("msg%i\n", x);
    void PositiveTestMacro()
    {
      int x = 42;
      srand(x);
    }

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

CWE-676 MISRA-C-2012-21.24 MISRA-C-2023-21.24