メインコンテンツ

AUTOSAR C++14 Rule A2-3-1

Only those characters specified in the C++ Language Standard basic source character set shall be used in the source code

説明

ルール定義

C++ 言語標準の基本ソース文字セットで指定されている文字だけをソース コードで使用するものとします。

根拠

C++ 標準では、基本ソース文字セットが 96 文字で構成されます。構成要素を以下に示します。

  • スペース文字。

  • 水平タブ、垂直タブ、改ページ、改行などの制御文字。

  • 大文字、小文字、および数字。

  • _ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ' などの特殊文字。

このセットに含まれない文字を使用すると、混乱または予期せぬバグを招く可能性があります。たとえば、ギリシャ文字の "Τ" と英字の "T" は見た目が似ていますが、Unicode コード ポイント値が異なる別々の文字です。予期せぬ動作を回避するには、コメントや文字列リテラルも含め、上で指定された文字のみをソース コードで使用してください。このセットに含まれない文字を使用できるのは次の 2 つのケースのみです。例外を以下に示します。

  • ワイド文字列のテキストまたは UTF-8 でエンコードされた文字列内のその他の文字。

  • コメント、ワイド文字列のテキスト、または UTF-8 でエンコードされた文字列内の文字 @

Polyspace 実装

Polyspace® は、AUTOSAR C++14 規約からの 2 つの例外を除いて、C++ 標準で指定されている 96 文字のセットに含まれない、ソース コード内の文字にフラグを設定します。Polyspace がフラグを設定しないケースは次のとおりです。

  • ワイド文字列のテキストまたは UTF-8 でエンコードされた文字列内のその他の文字。

  • コメント、ワイド文字列のテキスト、または UTF-8 でエンコードされた文字列内の文字 @

トラブルシューティング

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

すべて展開する

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

#include <cstdint>

// @ brief foo function    //Compliant by exception
/* @ brief foo function */ //Compliant by exception

#if 0
@ This one is not in a comment  //Noncompliant
#endif
/*Define £ and € as currency */   // Noncompliant 
#define CUR1 "£"   //Noncompliant                         
#define CUR2 "€"   //Noncompliant 
void myfunction(char *str );                        
int  Total = 0;    //Complaint
int  Τotal = 0;    //Noncompliant
void foo()
{
	char *s1 = "Greek Τ  - normal string"; //Noncompliant
	wchar_t *s2 { L"Greek Τ @ wide string"};  //Compliant
	char *s3 = u8"Greek Τ @ UTF-8";          // Compliant 
	char16_t *s4 = u"Greek Τ UTF-16";  //Noncompliant
	char32_t *s5 = U"Greek Τ UTF-32";  //Noncompliant
	char *s6 = "mail@company.com"; //Noncompliant
	myfunction("Greek Τ");//Noncompliant 
	myfunction(s3);//Complaint
}

main(){
	// ..
}

指定された文字セットに含まれない文字がコードに使用されている場合は、Polyspace がそれらの文字にフラグを設定します。グローバル変数 TotalΤotal に注目してください。一見同じ変数に見えますが、これらは 2 つの異なる変数です。なぜなら、後者はギリシャ文字の "Τ" で始まっているからです。この 2 つの文字の混同が予期せぬ動作につながる可能性があります。ギリシャ文字の "Τ" は標準文字セットに含まれないため、Polyspace は、コメントや文字列リテラルも含め、この文字のすべての使用にフラグを設定します。

Polyspace は、次の例外を除いて、指定されたセットに含まれない文字のすべての使用にフラグを設定します。例外を以下に示します。

  • s2 などのワイド文字列または s3 などの UTF-8 でエンコードされた文字列内のその他の文字。

  • s2 などのワイド文字列、s3 などの UTF-8 でエンコードされた文字列、またはコメント内の文字 @

チェック情報

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

バージョン履歴

R2020a で導入