V3539. AUTOSAR. Array indexing should be the only form of pointer arithmetic and it should be applied only to objects defined as an array type.
Данное диагностическое правило основано на руководстве AUTOSAR (AUTomotive Open System ARchitecture) по разработке программного обеспечения.
Данное правило рекомендует не использовать адресную арифметику. Единственной формой адресной арифметики, допускаемой к использованию данным правилом, является операция индексирования ('[]'), примененная к сущности, объявленной как массив.
Исключение: допускается использовать инкремент и декремент ('++' и '--').
Использование адресной арифметики усложняет чтение программы и может являться причиной неправильного понимания написанного когда. С другой стороны, использование индексирования является явным и легко читаемым, и даже если при его использовании будет внесена ошибка, её будет легче обнаружить. То же касается и операций инкремента/декремента: они явно дают понять, что мы последовательно обходим область памяти, представляющую собой непрерывную область данных.
Пример нарушения правила:
int arr[] = { 0, 1, 2 };
int *p = arr + 1; //+V2563
p += 1; //+V2563
int *q = p[1]; //+V2563
Корректный вариант кода:
int arr[] = { 0, 1, 2 };
int *p = &arr[1];
++p;
Данная диагностика классифицируется как:
|