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