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

Данное диагностическое правило основано на руководстве [MISRA](https://www.misra.org.uk/) \(Motor Industry Software Reliability Association\) по разработке программного обеспечения\. 

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

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

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

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

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

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