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

Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.

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

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

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

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

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

Данная диагностика классифицируется как:

MISRA-CPP-2008-8.4.1