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);
}
Данная диагностика классифицируется как:
|