Skip to main content

SA0077: 列挙型が一致しません CASE 表現

aが当てはまるコード位置を検出します CASE ステートメントは列挙値と非列挙型を混在させます。

理由:CASE 構文に列挙値と整数値を混在させると、データ型の安全性が損なわれ、コードの可読性が低下し、保守性に影響します。列挙値によって意味が明確になります。未処理の整数値を使用すると、軽微なエラーが発生するリスクがあり、コードが理解しにくくなります。列挙のデータ型が変更されると、整数ベースの分岐が壊れてしまい、見過ごされてしまうこともあります

重要度:低

84.
{attribute 'qualified_only'}
{attribute 'strict'}
TYPE DUT_MyEnum :
(
	One := 1, 
	Two := 2, 
	Three := 3, 
	Four := 4
);
END_TYPE
PROGRAM PRG_Case
VAR
diVar : DINT;
xTemp : BOOL;

eMyEnum : DUT_MyEnum;
END_VAR
CASE diVar OF
    1 :
        xTemp := FALSE;
    DUT_MyEnum.Two : // SA0077
        xTemp := TRUE;
    ELSE
        xTemp := NOT xTemp;
END_CASE

CASE eMyEnum OF
    1 : // SA0077
        xTemp := FALSE;
    DUT_MyEnum.Two:
        xTemp := TRUE;
    ELSE
        xTemp := NOT xTemp;
END_CASE

での出力 メッセージ ビュー:

  • sa_icon_message.png SA0077: CASE 式と型が一致しません