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

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

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

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

Функции [`srand`](https://en.cppreference.com/w/cpp/numeric/random/srand) и [`rand`](https://en.cppreference.com/w/cpp/numeric/random/rand) используются для работы с генератором псевдослучайных чисел\. Первая функция инициализирует его начальным значением, а вторая генерирует псевдослучайное число\.

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

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

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

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

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