SA0058:对枚举变量的操作
检测对枚举数据类型的变量的操作 允许赋值。
理由:枚举不应用作普通整数值。或者,可以定义别名数据类型或者可以使用子范围类型。
重要性:中等
例外:如果枚举用 pragma 标记 {attribute 'strict'}
,那么编译器已经报告了这种操作。
如果枚举被 pragma 声明为标志 {attribute 'flags'}
,则不会发出错误 AND
, OR
, NOT
, 或序 XOR
操作。
例 68. 例子
TYPE My_Enum : ( red := 1, blue := 2, green := 3, black := 4 ); END_TYPE
PROGRAM PLC_PRG VAR iTemp1 : INT; abc : My_Enum; END_VAR
iTemp1 := iTemp1 + INT#1; abc := My_Enum.red; // OK iTemp1 := My_Enum.black / My_Enum.blue; // SA0058 iTemp1 := My_Enum.green / My_Enum.red; // SA0058
输出在 留言 看法:
SA0058:枚举变量的操作
例 69. 使用编译指示 {attribute 'flags'} 的示例
{attribute 'flags'} // declaring the enumeration as a "flag" TYPE Flags : ( Unknown := 16#00000001, Stopped := 16#00000002, Running := 16#00000004 ) DWORD; END_TYPE
PROGRAM PLC_PRG VAR iTemp1 : INT; abc : Flags; batate : BYTE; dwFlags : DWORD; dwState : DWORD; END_VAR
// OK for the following IF (dwFlags AND Flags.Unknown) <> DWORD#0 THEN dwState := dwState AND Flags.Unknown; ELSIF (dwFlags OR Flags.Stopped) <> DWORD#0 THEN dwState := dwState OR Flags.Running; END_IF