AUTOSAR C++14 Rule A2-13-6

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

Описание

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

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

Объяснение

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

Реализация Polyspace

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

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

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

Примеры

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

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

#include <cstdint>
#define \U0000231AMACRO(x) (x)     // Noncompliant
int \U000030AD = 0;   //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
       キ=2; // \u30AD is 'キ'
}
typedef struct \U0000231Astruct {    // Noncompliant
	std::int32_t regular; 
	std::int32_t €uro;                // Compliant 
	std::int32_t \U0000231Ahello;     // Noncompliant
} \U0001f615type;                // Noncompliant

main(){
	//...
}

Переменная \U000030AD инициализируется к 0. это позже упомянуто при помощи его литеральной формы ''. Это неясно тот и \U000030AD обратитесь к той же глобальной переменной. Чтобы избежать беспорядка, вызванного универсальными именами персонажей, Polyspace отмечает их использование вне символьного или строкового литерала.

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

Группа: Лексические соглашения

Введенный в R2020a