AUTOSAR C++14 Rule A2-10-6

Имя класса или перечисления не должно быть скрыто объявлением переменной, функции или перечислителя в тех же возможностях

Описание

Определение правила

Имя класса или перечисления не должно быть скрыто объявлением переменной, функции или перечислителя в тех же возможностях.

Объяснение

Когда переменная, представитель данных, функция или перечислитель делится своим именем с классом или перечислением в тех же возможностях, последняя скрыта. То есть все использования имени ссылаются на переменную, представитель данных, функцию или перечислитель вместо класса или перечисления, независимо от порядка объявления. Скрытые классы или перечисления могут ввести в заблуждение и привести к ошибкам компиляции. Не используйте имена повторно для объявления классов и перечислений.

Реализация Polyspace

Polyspace® помечает объявление переменной, представителя данных, функции или перечислителя, который имеет общее имя класса или перечисления в том же блоке.

Поиск и устранение проблем

Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».

Примеры

расширить все

Следующий пример демонстрирует реализацию Polyspace правила A2-10-6 AUTOSAR.

#include <cstdint>
namespace NS1
{
	class G {};
	void G() {}             //Noncompliant
}    
namespace NS2
{
	enum class H { VALUE=0, };
	std::uint8_t H = 17;    //Noncompliant
}
namespace NS3
{
	class J {};
	enum H {                 
		J=0,                 // Noncompliant 
	};
} 
main()
{
	//...
}
 

Polyspace помечает объявление:

  • Функциональные G() потому что он скрывает класс G объявлен в том же блоке.

  • Переменные H потому что он скрывает перечисление H объявлен в том же блоке.

  • Перечислитель J потому что он скрывает класс J объявлен в том же блоке.

Проверяйте информацию

Группа: Лексические конвенции
Категория: Необходимый, Автоматизированный
Введенный в R2020a