PVS-Studio.com logo
>
>
>
V2636. MISRA. The functions with the 'r…


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);
}

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