﻿# V2560\. MISRA\. There should be no user\-defined variadic functions\.

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

Данное диагностическое правило актуально только для C\+\+\. В коде не должно быть ни одной определённой вариативной пользовательской функции \(содержащий эллипсис '\.\.\.'\)\. Аргументы, передаваемые в функцию через эллипсис, не проверяются компилятором на соответствие типов, что может привести к ошибкам\. Имея только объявление без определения, можно перепутать тип аргументов\. Также передача аргумента non\-POD типа ведёт к неопределённому поведению\.

Пример кода, на который анализатор выдаст предупреждение: 

```cpp
void foo(int _, ...) // <=
{
  va_list ap;               
  va_start(ap, _);   
  ....
  va_end(ap); 
}
```

Стандарт, однако, разрешает объявление вариативных функций для использования существующих библиотечных функций\. Допустимый код:

```cpp
int printf(const char *fmt, ...);
```