CWE Rule 481
説明
ルールの説明
The code uses an operator for assignment when the intention was to perform a comparison.
Polyspace 実装
このルール チェッカーは、[= (代入) 演算子の無効な使用] をチェックします。
例
この問題は、if
や while
などの条件付きステートメントの述部内で代入が行われた場合に発生します。
C および C++ では、単一の等号は比較ではなく代入を表します。条件付きステートメントで単一の等号を使用している場合は、誤入力やミスである可能性があります。
条件付きステートメントによる間違った値のテスト - 単一等号の演算は右辺のオペランドの値を左辺のオペランドに代入します。この代入は条件付きの述部内で行われるため、プログラムでは左辺のオペランドの新しい値が非ゼロかつ非 NULL であることがチェックされます。
保守およびコードの可読性の問題 - 代入を意図した場合でも、コードを読む際、または更新する際に、代入ではなく、誤って等値比較と解釈する可能性があります。
代入がバグの場合、等価性をチェックするためもう 1 つ等号を追加します (
==
)。条件付きステートメント内で代入を意図的に行っている場合は、可読性を上げるため、代入とテストを分離します。代入を制御ステートメントの外に移動します。制御ステートメントでは、単純に代入の結果をテストします。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)。
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
#include <stdio.h>
void bad_equals_ex(int alpha, int beta)
{
if(alpha = beta) //Noncompliant
{
printf("Equal\n");
}
}
if ステートメントの述部内で代入演算子が使用されているため、この等号に欠陥としてのフラグが付けられます。述部は、値 beta
を alpha
に代入し、次に alpha
が true か false かを暗黙的にテストします。
1 つの修正方法として、等号を追加することができます。この修正により、代入が比較に変わります。if 条件は alpha
と beta
が等しいかどうかを比較します。
#include <stdio.h>
void equality_test(int alpha, int beta)
{
if(alpha == beta)
{
printf("Equal\n");
}
}
if
条件内での代入と比較
述部内で代入を行わなければならない場合、考えられる 1 つの修正方法として、明示的な比較を追加します。この修正により、beta
の値が alpha
に代入され、次に alpha
が非ゼロであるかどうかが明示的にチェックされます。コードが明確になります。
#include <stdio.h>
int assignment_not_zero(int alpha, int beta)
{
if((alpha = beta) != 0)
{
return alpha;
}
else
{
return 0;
}
}
if
ステートメント外部に代入を移動
制御ステートメント外部で代入を行うことができる場合、考えられる 1 つの修正方法として、代入と比較を分離します。この修正により、if の前に beta
の値が alpha
に代入されます。if 条件内では alpha
のみを指定し、alpha
が非ゼロかつ非 NULL であることをテストします。
#include <stdio.h>
void assign_and_print(int alpha, int beta)
{
alpha = beta;
if(alpha)
{
printf("%d", alpha);
}
}
チェック情報
カテゴリ: その他 |
バージョン履歴
R2023a で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)