AUTOSAR C++14 Rule A2-13-6

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

Описание

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

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

Объяснение

Универсальные имена символов являются способом представления символов Юникод с помощью кодовых точек. Для примера, \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