Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V2657. MISRA. Obsolescent language...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V2657. MISRA. Obsolescent language features should not be used.

24 Сен 2025

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

Правило актуально только для языка C.

Правило требует избегать использования языковых конструкций, объявленных устаревшими в пунктах 6.11 и 7.33 стандартах языка C. Это связано с тем, что такие конструкции могут демонстрировать нежелательное поведение и обычно заменяются более безопасными и эффективными аналогами.

В следующей таблице приведён список устаревших возможностей, на которые срабатывает данное диагностическое правило:

N

Устаревшие возможности языка

Диагностическое правило

Стандарт языка

1

Функция или объект, объявленный однажды с внутренним типом связывания, при повторном объявлении или определении будет также иметь внутреннее связывание. Поэтому следует явно указывать спецификатор static в каждом объявлении и определении.

V2608

С99, C11, C18

2

Спецификаторы классов хранения (extern, static и т.д.) указаны не в начале объявления и определения.

V2657

С99, C11, C18

3

Объявление функции с использованием пустых скобок.

V2601

С99, C11, C18

4

Использование объявлений функций в стиле K&R, а также неименованных параметров функций.

V2601

С99, C11, C18

5

Использование макроса ATOMIC_VAR_INIT, определённого в stdatomic.h.

V2657

C18

6

Переопределение макросов bool, true и false, определённых в stdbool.h.

V2573

С99, C11, C18

7

Использование функции gets(), определённой в stdio.h.

V2600

С99

8

Использование функции ungetc() в двоичном потоке, где идентификатор положения файла равен нулю.

V2600

С99, C11, C18

9

Использование функции realloc(), определённая в stdlib.h с аргументом size, равным нулю.

V2511

C18

Таким образом, правило V2657 работает совместно с другими диагностическими правилами, указанными во втором столбце таблицы, обеспечивая комплексную проверку.

Рассмотрим два примера, которые покрываются этим правилом, но не покрываются другими.

Пример N1. Спецификатор указан не в начале объявлении переменной:

int static var;

Исправленный пример:

static int var;

Пример N2. Использование ATOMIC_VAR_INIT:

atomic_int guide = ATOMIC_VAR_INIT(42);

Исправленный код:

_Atomic int guide = 42;

Больше примеров можно посмотреть в соответствующих документациях к диагностикам в таблице.

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

  • MISRA-C-2023-1.5