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

V2562. MISRA. Expressions with pointer type should not be used in the '+', '-', '+=' and '-=' operations.

12 Дек 2019

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

Данное правило актуально только для языка C. Указатели не должны использоваться в выражениях '+', '-', '+=' и '-='. При этом допускается использовать операцию индексирования '[]' и инкремент/декремент ('++'/'--').

Использование адресной арифметики усложняет чтение программы и может являться причиной неправильного понимания написанного когда. С другой стороны, использование индексирования является явным и легко читаемым, и даже если при его использовании будет внесена ошибка, её будет легче обнаружить. То же касается и операций инкремента/декремента: они явно дают понять, что мы последовательно обходим область памяти, представляющую собой непрерывную область данных.

Пример нарушения правила:

int arr[] = { 0, 1, 2 };
int *p = arr + 1;        //+V2562
p += 1;                  //+V2562

Корректный вариант кода:

int arr[] = { 0, 1, 2 };
int *p = &arr[1];
++p;
int *q = p[1];

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

  • MISRA-C-2012-18.4
  • MISRA-C-2023-18.4
  • MISRA-CPP-2008-5.0.15