Объявление объектов должно содержать не более двух уровней косвенности указателя
Объявление объектов должно содержать не более двух уровней косвенности указателя.
Если вы используете указатели с более чем двумя уровнями косвенности, разработчику, читающему код, может быть трудно понять поведение кода.
Polyspace ® помечает все объявления объектов, которые содержат более двух уровней косвенного указания.
При использовании псевдонимов типа средство проверки включает указания указателей из псевдонима в оценку уровня косвенности. Например, в этом фрагменте кода объявление var не соответствует требованиям. Тип var является const указатель на const указатель на указатель на char, что представляет собой три уровня косвенности указателя. Объявление var2 имеет два уровня косвенности указателя и является совместимым.
using ptrToChar = char*;
void func()
{
ptrToChar* const* const var = nullptr; //Non-compliant, 3 levels of indirection
char* const* const var2 = nullptr; //Compliant, 2 levels of indirection
//...
}При передаче массива в функцию преобразование массива в указатель на первый элемент массива включается в оценку уровня косвенности. Например, в этом фрагменте кода параметр arrParam не соответствует требованиям. Тип arrParam является указателем на указатель на указатель на char (три уровня косвенности указателя). Объявление arrVar соответствует, потому что arrVar Имеет типовой массив указателя на символ (два уровня косвенности указателя).
void func(char** arrParam[]) //Non-compliant
{
//...
char** arrVar[5]; //Compliant
} Эта проверка не помечает использование объектов с более чем двумя уровнями косвенности. Например, в этом фрагменте кода объявление var не соответствует, но оценка размера var соответствует требованиям.
#include<iostream>
using charToPtr = char*;
void func()
{
charToPtr* const* const var = nullptr; //Non-compliant
std::cout << sizeof(var) << std::endl; //Compliant
}Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.
| Группа: Выражения |
| Категория: Обязательно, Автоматизировано |