Диагностическое правило основано на руководстве MISRA (Motor Industry Software Reliability Association) по разработке программного обеспечения.
Правило актуально только для языка C.
Правило требует избегать использования языковых конструкций, объявленных устаревшими в пунктах 6.11 и 7.33 стандартах языка C. Это связано с тем, что такие конструкции могут демонстрировать нежелательное поведение и обычно заменяются более безопасными и эффективными аналогами.
В следующей таблице приведён список устаревших возможностей, на которые срабатывает данное диагностическое правило:
|
N |
Устаревшие возможности языка |
Диагностическое правило |
Стандарт языка |
|---|---|---|---|
|
1 |
Функция или объект, объявленный однажды с внутренним типом связывания, при повторном объявлении или определении будет также иметь внутреннее связывание. Поэтому следует явно указывать спецификатор |
С99, C11, C18 |
|
|
2 |
Спецификаторы классов хранения ( |
V2657 |
С99, C11, C18 |
|
3 |
Объявление функции с использованием пустых скобок. |
С99, C11, C18 |
|
|
4 |
Использование объявлений функций в стиле K&R, а также неименованных параметров функций. |
С99, C11, C18 |
|
|
5 |
Использование макроса |
V2657 |
C18 |
|
6 |
Переопределение макросов |
С99, C11, C18 |
|
|
7 |
Использование функции |
С99 |
|
|
8 |
Использование функции |
С99, C11, C18 |
|
|
9 |
Использование функции |
C18 |
Таким образом, правило V2657 работает совместно с другими диагностическими правилами, указанными во втором столбце таблицы, обеспечивая комплексную проверку.
Рассмотрим два примера, которые покрываются этим правилом, но не покрываются другими.
Пример N1. Спецификатор указан не в начале объявлении переменной:
int static var;
Исправленный пример:
static int var;
Пример N2. Использование ATOMIC_VAR_INIT:
atomic_int guide = ATOMIC_VAR_INIT(42);
Исправленный код:
_Atomic int guide = 42;
Больше примеров можно посмотреть в соответствующих документациях к диагностикам в таблице.
Данная диагностика классифицируется как:
|