检测有符号变量的位访问。不过,IEC 61131-3 标准只允许对位域进行位访问和位移操作。另请参阅严格规则 SA0147 和 SA0148。
理由有符号数据类型不应作为位域使用,反之亦然。IEC 61131-3 标准没有规定这种访问权限,因此在编写可移植代码时应遵守这一规则。
重要性:中型
标志枚举例外:当通过{attribute 'flags'}
pragma 属性将枚举声明为标志时,使用OR
、AND
或 NOT
操作符进行位访问时,不会出现SA0018
错误。
示例
PROGRAM PLC_PRG VAR iTemp1 : INT; diTemp3 : DINT; uliTemp4 : ULINT; siTemp5 : SINT; usiTemp6 : USINT; byTemp2 : BYTE; END_VAR iTemp1.3 := TRUE; // SA0018 diTemp3.4 := TRUE; // SA0018 uliTemp4.18 := FALSE; // no error because this is an unsigned data type siTemp5.2 := FALSE; // SA0018 usiTemp6.3 := TRUE; // no error because this is an unsigned data type byTemp2.5 := FALSE; // no error because the byte is a bitfield --> SA0018: Unusual bit access