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

V2645. MISRA. The language features specified in Annex K should not be used.

22 Июл 2025

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

Это правило актуально только для C.

Стандарт языка C (C11) содержит Приложение K – "Bounds-checking interfaces" которое описывает библиотеку альтернативных функций (пункт K.3) для более безопасного и надёжного программирования.

Например, функция strcpy не выполняет проверку границ буфера, что может привести к переполнению. В качестве безопасной альтернативы предоставляется strcpy_s, которая проверяет буфер и может вернуть индикатор ошибки, если размера буфера недостаточно.

Использование таких функций без определения макроса __STDC_WANT_LIB_EXT1__ не будет ошибкой, так как они являются частью стандарта. То есть эти функции не относятся к Приложению K, поэтому их использование допускается.

Если макрос __STDC_WANT_LIB_EXT1__ определён, то функции используются как расширение из Приложения K.

Использование этих расширенных функций может привести к непредсказуемым результатам, так как для некоторых из них стандарт не определяет поведение, оставляя его на усмотрение разработчиков стандартной библиотеки.

Согласно MISRA, функции, определения и макросы из Приложения K не могут быть использованы, если макрос __STDC_WANT_LIB_EXT1__ раскрывается в 1.

Рассмотрим пример:

#define __STDC_WANT_LIB_EXT1__ 1
#include <string.h>
void foo ()
{
  const char* src = "Hello";
  char dst[30];
  int res = strcpy_s(dst, sizeof(dst), src);
}

Функция strcpy_s используется для безопасного копирования строки src в буфер dst с проверкой границ, чтобы предотвратить его переполнение. В приведённом примере анализатор выдаст срабатывание, так как обнаружит, что макрос __STDC_WANT_LIB_EXT1__ определён, поэтому функция strcpy_s относится к библиотеке альтернативных функций из Приложения К.

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

  • MISRA-C-2023-1.4