﻿# V2605\. MISRA\. Features from <tgmath\.h\> should not be used\.

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\.

Это правило актуально только для С\. Запрещено использовать функции или макросы из заголовочного файла '<tgmath\.h\>'\. Их использование может привести к неопределённому поведению\.

Рассмотрим пример:

```cpp
void bar(float complex fc)
{
  ceil(fc); // undefined behavior
}
```

Вызов функции 'ceil' с фактическим аргументом типа 'float complex' приведет к неопределенному поведению, так как в [стандартной библиотеке](https://en.cppreference.com/w/c/numeric/complex) отсутствует специализированная версия с таким типом формального параметра\.

В случае, когда специализированная функция существует, следует использовать именно ее для того, чтобы избежать подобных ситуаций:

```cpp
#include <tgmath.h>

float foo(float x)
{
  return sin(x);
}
```

Для функции 'sin' существует специализированная версия с формальным аргументом типа 'float' \- 'sinf':

```cpp
#include <math.h>

float foo(float x)
{
  return sinf(x);
}
```