メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2012 Rule 10.2

Expressions of essentially character type shall not be used inappropriately in addition and subtraction operations

説明

ルール定義

Expressions of essentially character type shall not be used inappropriately in addition and subtraction operations 1 .

根拠

実質的な文字型の式は char 変数です。char は数値を表さないため、このデータを算術演算で使用しないでください。

以下の場合にのみ、char を加算演算と減算演算で適切に使用できます。

  • 加算 (+) 演算の一方のオペランドが char であり、もう一方が符号付きまたは符号なしの charshort、または int である場合。この場合、演算は char を返します。

  • 減算 (-) 演算の 1 つ目のオペランドが char であり、2 つ目が符号付きまたは符号なしの charshort、または int である場合。両方のオペランドが char である場合、演算は "標準の" 型を返します。それ以外の場合、演算は char を返します。

上記の用法によって、大文字と小文字の変換や数字と序数値の変換などの文字データ操作が可能になります。

実質的な型についての詳細は、MISRA C Rule 10.x の実質的な型を参照してください。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

すべて展開する

#include<stdint.h>
typedef double float64_t;
extern uint8_t u8a;
extern int8_t s8a;
extern int16_t s16a;
extern int32_t s32a;
extern float64_t fla;
extern long lval;

void foo ( void )
{
	char cha;

	s16a = s16a - 'a';  /* Noncompliant*/
	
	cha = '0' + fla;    /* Noncompliant*/
	
	cha = cha  + ':';   /* Noncompliant*/
	
	cha += lval;  /* Noncompliant*/
}

  • 整数から char 型変数を減算することはできません。整数 s16a から 'a' を減算すると、Polyspace® は違反を報告します。

  • 加算演算では、char 型変数を整数型変数にのみ加算できます。浮動小数点数 fla'0' に加算すると、Polyspace は違反を報告します。

  • char 型変数に long 型変数を加算することはできません。lvalcha に加算すると、Polyspace は違反を報告します。

  • 算術演算 cha+':' は、大文字から小文字への変換や数字から基数値への変換ではありません。算術式で char 変数を使用すると、Polyspace は違反を報告します。

#include<stdint.h>
typedef double float64_t;
extern uint8_t u8a;
extern int8_t s8a;
extern int16_t s16a;
extern int32_t s32a;
void foo ( void )
{
	char cha;

	cha = '0' + u8a;     /* Compliant*/
	
	cha = s8a + '0';     /* Compliant*/
	
	s32a = cha  - '0';   /* Compliant*/
	
	cha = '0' - s8a;     /* Compliant*/
	
	cha++;               /* Compliant*/
}

char 型変数は、char データの操作を実行する特定の加算または減算演算で使用できます。次に例を示します。

  • 符号なし整数 u8achar 型データ '0' に追加して、'0' から別の文字に変換できます。

  • 同様に、符号付き整数 s8a'0' に追加して、目的とする文字変換を実行できます。

  • char データ '0' から s8a を減算することもできます。

  • char データのインクリメントやデクリメントも可能です。

チェック情報

グループ: 実質的な型モデル
カテゴリ: 必要
AGC カテゴリ: 推奨

バージョン履歴

すべて展開する


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.