Данное диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Это правило актуально только для C. Использование объявлений функций в стиле "K&R", а также неименованных параметров функций небезопасно.
Функции, объявленные в старом стиле – "K&R" – не несут в себе информации о типах и количестве параметров, поэтому использование таких функций может привести к ошибкам.
Использование именованных параметров функций дает полезную информацию об интерфейсе функции, а также позволяет отследить ошибку, если имена в объявлении и определении различаются.
Рассмотрим пример:
// header
void draw();
// .c file
void draw(x, y)
double x;
double y;
{
// ....
}
// usage
void foo()
{
draw(1, 2);
}
Декларация функции 'draw' не содержит параметров, так что при вызове функции 'draw' в нее будут переданы 2 параметра типа 'int', а не 'double', что является ошибкой. Объявление функции с использованием прототипа исправит проблему:
// header
void draw(double x, double y);
// .c file
void draw(double x, double y)
{
// ....
}
Если функция не имеет параметров, то объявление с использованием пустых скобок не является правильным, т.к. такое объявление соответствует стилю "K&R":
void foo();
Такая декларация допускает передачу любого числа аргументов. Чтобы явно указать, что функция не имеет параметров, нужно использовать ключевое слово 'void':
void foo(void);
Неименованные параметры делают интерфейс функции менее понятным:
void draw(double, double);
Поэтому следует давать параметрам имена, чтобы избежать ошибок в использовании функции:
void draw(double x, double y);
Данная диагностика классифицируется как:
|