Объявление объектов должно содержать не более двух уровней опосредования указателя
Объявление объектов должно содержать не более двух уровней опосредования указателя.
Если вы используете указатели с более чем двумя уровнями опосредования, разработчику, читающему код, может оказаться трудно понять поведение кода.
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
имеет массив типов указателя на указатель на char (два уровня опосредования указателя).
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 }
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
Группа: Выражения |
Категория: Необходимый, Автоматизированный |