Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для С. Запрещено использовать функции или макросы из заголовочного файла '<tgmath.h>'. Их использование может привести к неопределённому поведению.
Рассмотрим пример:
void bar(float complex fc)
{
ceil(fc); // undefined behavior
}
Вызов функции 'ceil' с фактическим аргументом типа 'float complex' приведет к неопределенному поведению, так как в стандартной библиотеке отсутствует специализированная версия с таким типом формального параметра.
В случае, когда специализированная функция существует, следует использовать именно ее для того, чтобы избежать подобных ситуаций:
#include <tgmath.h>
float foo(float x)
{
return sin(x);
}
Для функции 'sin' существует специализированная версия с формальным аргументом типа 'float' - 'sinf':
#include <math.h>
float foo(float x)
{
return sinf(x);
}
Данная диагностика классифицируется как:
|