# V3537. AUTOSAR. Subtraction, >, >=, <, <= should be applied only to pointers that address elements of the same array.

Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.

Согласно стандарту C++ (C++17 § 8.5.9 п. 3) применение одного из операторов '-', '>', '>=', '<' или '<=' к двум указателям, которые не указывают на элементы одного и того же массива, приводит к неопределенному/неуточненному поведению (undefined/unspecified behaviour). Таким образом, если два указателя указывают на разные объекты массива, тогда эти объекты массива должны входить в один и тот же массив для того, чтобы сравнить их.

Пример кода, на который анализатор выдаст предупреждение:

    int arr1[10];
    int arr2[10];
    int *pArr1 = arr1;
    if (pArr1 < arr2)
    {
      ....
    }

Также следующий код является ошибочным:

    int arr1[10];
    int arr2[10];
    int *pArr1 = &arr1[1];
    int *pArr2 = &arr2[1];
    int len = pArr1 - pArr2;

Подробнее о том, почему использование указателей может привести к ошибке можно прочитать в статье: "Указатели в C абстрактнее, чем может показаться".

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

AUTOSAR-M5.0.17 AUTOSAR-M5.0.18