检测使用前未初始化的接口
理由在使用接口引用之前,应检查其是否 <> 0。否则在访问过程中可能会出现违规访问。
重要性:高
示例
//declaration of INTERFACE ITF and assigned METH2: METHOD METH2 : BOOL VAR_INPUT iInput2:INT; END_VAR //declaration of INTERFACE Master_ITF1 and assigned METH: METHOD METH : BOOL VAR_INPUT iInput:INT; END_VAR PROGRAM PLC_PRG VAR instPOU:POU; instITF:ITF; instMasterITF1:Master_ITF1; instMasterITF2:Master_ITF2; iDummy:INT; xDummy:BOOL; instNoInitITF:ITF; instNoInitITF2:ITF; instNoInitMasterITF1:Master_ITF1; instNoInitMasterITF2:Master_ITF2; END_VAR instITF := instPOU; xDummy := instITF.METH(iInput := iDummy); // OK instMasterITF1 := instPOU; xDummy := instMasterITF1.METH(iInput := iDummy); // OK xDummy := instNoInitITF.METH(iInput := INT#1); // SA0046 xDummy := instNoInitITF.METH2(iInput2 := INT#2); // SA0046 xDummy := instNoInitMasterITF1.METH(iInput := INT#3); // SA0046 iDummy := instNoInitMasterITF2.Prop; // SA0046 IF instNoInitITF <> 0 THEN instNoInitITF.Prop; // OK, weil das Interface nicht 0 sein kann END_IF --> SA0046: Possible use of not initialised interface 'instNoInitITF' --> SA0046: Possible use of not initialised interface 'instNoInitITF' --> SA0046: Possible use of not initialised interface 'instNoInitMasterITF1' --> SA0046: Possible use of not initialised interface 'instNoInitMasterITF2