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-8.4.1

Найденные ошибки

Проверено проектов
411
Собрано ошибок
14 123

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять