メインコンテンツ

AUTOSAR C++14 Rule A7-1-1

Constexpr or const specifiers shall be used for immutable data declaration

説明

ルール定義

Constexpr or const specifiers shall be used for immutable data declaration.

根拠

変数 const または constexpr を宣言すると、変数を不用意に変更する可能性を低くできます。さらに、コンパイラは const 変数と constexpr 変数にさまざまな最適化を実施し、実行時のパフォーマンスが向上します。

Polyspace 実装

チェッカーは以下にフラグを設定します。

  • const 修飾子は付いていないが、関数本体で変更されない関数パラメーターまたはローカル変数。

  • const 修飾子は付いていないが、存続期間を通じて同じ場所を指すポインター。

整数型、浮動小数点型、enum 型、および boolean 型の関数パラメーターにはフラグは設定されません。

参照またはポインターによって変数が別の関数に渡される場合、チェッカーでは、その変数は変更される可能性があると想定します。そのような変数にはフラグは設定されません。

トラブルシューティング

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

すべて展開する

#include <cstddef>
bool Status;
extern int setStatus(); //sets Status; returns -1 if fails

char getNthChar(const char* str, int N){ //noncompliant
	int index=0;
	int status = setStatus(); //noncompliant
	while(*(str+index)!='\0'){
		if(index==N)
			return *(str+N);
		++index;
	}
		
	return '\0';
}
char getNthChar_const_safe(const char* const str, int N){
	int index=0;
	const int status = setStatus();
	while(*(str+index)!='\0'){
		if(index==N)
			return *(str+N);
		++index;
	}
		
	return '\0';
}

関数 getNthChar() では、C 文字列 strconst char* パラメーターとして渡されます。これは、文字列 *strconst であることを意味します。ポインター str は値を変更しないため、関数 getNthChar_const_safe に示すように、ポインター自体に const 修飾子を付ける必要があります。Polyspace は、str パラメーターにフラグを設定します。

ローカル整数 statusgetNthChar() 内で変更されないため、getNthChar_const_safe に示すように、const として宣言する必要があります。Polyspace は、この宣言にフラグを設定します。

チェック情報

グループ: 宣言
カテゴリ: Required、Automated

バージョン履歴

R2020b で導入

すべて展開する