メインコンテンツ

AUTOSAR C++14 Rule A2-13-6

Universal character names shall be used only inside character or string literals

説明

ルール定義

ユニバーサル文字名は文字リテラルまたは文字列リテラル内でのみ使用するものとします。

根拠

ユニバーサル文字名は、コード ポイントを使用して unicode 文字を表現する方法です。たとえば、\U0000231A は unicode 文字の '⌚' を表します。ユニバーサル文字名を使用して識別子を定義すると、ソース コードが読みにくくなります。ユニバーサル文字名を識別子として使用すると混乱と問題が発生します。文字リテラルまたは文字列リテラル外部でのユニバーサル文字名の使用は避けてください。

Polyspace 実装

Polyspace® は、文字リテラルまたは文字列リテラルの外部でのユニバーサル文字列名の使用にフラグを設定します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

次の例では、AUTOSAR ルール A2-13-6 の Polyspace 実装を示します。

#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 は、文字リテラルまたは文字列リテラルの外部でのユニバーサル文字列名の使用にフラグを設定します。

チェック情報

グループ: 構文規則
カテゴリ: Required、Automated

バージョン履歴

R2020a で導入