Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2636. MISRA. The functions with the...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

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

04 Апр 2025

Данное диагностическое правило основано на руководстве 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);
}

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