Skip to main content

SA0052:不寻常的移位操作

检测有符号变量的移位操作(位移)。在对位域数据类型进行移位操作的情况下(Byte, DWORD, LWORD, WORD),不报错。

理由: CODESYS 允许对有符号数据类型进行移位操作。但是,这些操作是不寻常的并且可能会令人困惑。 IEC 61131-3 标准不提供此类操作。因此,应该避免它们以增加代码对其他开发系统的可移植性。

重要性:中等

62. 例子
PROGRAM PLC_PRG
VAR
    iTemp : INT;
    dwTemp1 : DWORD;
    byTemp2 : BYTE;
    diTemp3 : DINT;
    siTemp4 : SINT;
    liTemp5 : LINT;
END_VAR
//the following lines each will cause an  SA0052:
iTemp := SHL(iTemp, BYTE#2);
diTemp3 := SHR(diTemp3, BYTE#4);
siTemp4 := ROL(siTemp4, BYTE#2);
liTemp5 := ROR(liTemp5, BYTE#2);

//no error SA0052 because DWORD and BYTE are bitfield datatypes:
dwTemp1 := SHL(dwTemp1, BYTE#3);
byTemp2 := SHR(byTemp2, BYTE#1);

输出在 留言 看法:

  • sa_icon_message.png SA0052:异常轮班操作