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