AUTOSAR C++14 Rule A2-13-6

Универсальные имена персонажей должны использоваться только в символьных или строковых литералах.

Описание

Управляйте определением

Универсальные имена персонажей должны использоваться только в символьных или строковых литералах.

Объяснение

Универсальные имена персонажей являются способом представлять unicode символы при помощи кодовых точек. Например, \U0000231A представляет unicode символ '⌚'. Когда вы используете универсальные имена персонажей, чтобы задать идентификатор, он затрудняет, чтобы считать исходный код. Используя универсальные имена персонажей, когда идентификатор сбивает с толку и неприятен. Избегайте использования универсальных имен персонажей вне символьного или строкового литерала.

Реализация Polyspace

Polyspace® отмечает использование универсальных имен персонажей вне символьного или строкового литерала.

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

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

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

#include <cstdint>
#define \U0000231AMACRO(x) (x)     // Noncompliant
void €uro(){            // Compliant 
	std::int32_t €uro;    // Compliant
	std::int32_t \U0000231Ahello; // Noncompliant
	wchar_t wc = '\U0000231A';    // Compliant
	std::int32_t Hello\U0000231AWorld;  // Noncompliant
}
typedef struct \U0000231Astruct {    // Noncompliant
	std::int32_t regular; 
	std::int32_t €uro;                // Compliant 
	std::int32_t \U0000231Ahello;     // Noncompliant
} \U0001f615type;                // Noncompliant

main(){
	//...
}

Переменная \U0000231Ahello объявляется с помощью универсального имени персонажа. Такое имя переменной затрудняет использование и делает код сбивающим с толку. Polyspace отмечает использование универсальных имен персонажей вне символьного или строкового литерала.

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

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