Данное диагностическое правило основано на руководстве 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);
Данная диагностика классифицируется как:
|