メインコンテンツ

AUTOSAR C++14 Rule A5-1-1

Literal values shall not be used apart from type initialization, otherwise symbolic names shall be used instead

説明

ルール定義

型を初期化する場合のみリテラル値を使用し、そうでない場合は、代わりにシンボリック名を使用するものとします。

根拠

シンボリック名を使用することによって、コードの可読性と保守性を向上させます。リテラル定数は、その定数が何を表しているかを明確に示すものではありません。

Polyspace 実装

Polyspace® は、switch ステートメントの式や case 句で、データ型 char を持つリテラル値以外のリテラル値が使用されている場合、そのリテラル値の使用にフラグを設定します。

Polyspace は、ログ メカニズムでのリテラル値の使用にフラグを設定しません。

Polyspace は、式内のリテラル値 '0' と '1' の使用にフラグを設定しません。これは、このような使用がコードのロジックによく含まれているためです。たとえば、'0' は NULL ポインターを表します。

トラブルシューティング

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

すべて展開する

double foo(void){
	constexpr int speedLimit = 65;
	constexpr double coeff = 0.2;
	int flag{0};
	int negOne{-1};
	//... 
	return (flag)?speedLimit*coeff*negOne + 35 //Noncompliant
			: speedLimit*coeff*negOne - 35; //Noncompliant
}

double bar(void){
	constexpr int speedLimit = 65;
	constexpr double coeff = 0.2;
	int flag{0};
	int negOne{-1};
	int addedValue = 35;
	return (flag)?speedLimit*coeff*negOne + addedValue //Compliant
			: speedLimit*coeff*negOne - addedValue; //Compliant
}

この例では、Polyspace が、fooreturn 式内のリテラル値の使用にフラグを設定します。bar では、return 式でコードの可読性を高めるシンボリック名が使用されます。オブジェクトを開始するためのリテラルの使用は、このルールに違反しません。

チェック情報

グループ:
カテゴリ: Required、Partially automated

バージョン履歴

R2019a で導入

すべて展開する