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