Skip to main content

静态分析代码

您还可以在代码生成期间对源代码进行静态分析(“linten”)。它确定您的源代码是否遵循您设置的编码准则 - 沿着“lint”分析工具的行。

  • 在对话中 项目设置 在类别下 静态分析灯 启用将被检查的规则。每次生成代码时,检查本身都会自动进行,例如当您运行命令时 构建 → 生成代码 选择。如果检测到与规则的偏差,则将其分类为该类别的错误消息 翻译 显示在消息窗口中。报告的错误有一个前缀: SA<Zahl>.

重要

用于静态代码分析 静态分析灯 仅检查项目的应用程序代码。图书馆被排除在考试之外。

视图中 GVL 的变量 POU 不一定要检查:如果您的项目包含多个应用程序,则仅检查当前活动应用程序下的对象。如果您只有一个应用程序,还会检查通用 POUs 池中的对象。

提示

静态分析灯 仅包含在标准开发系统中的一组减少的规则中。安装附加组件时,可以使用一组扩展的规则、额外的命名约定和指标 CODESYS Static Analysis 安装。

从静态分析中排除带有编译指示的实现中的代码行

你可以在 pragma 的帮助下 {analysis ...} 标记代码以便不检查指定的规则。因此,以这种方式标记的代码行不会被静态分析。在测试期间,标记的代码将被忽略。

句法:

{analysis <Vorzeichen><Regelnummer>|,<weitere Kombinationen von Vorzeichen und Regelnummern, kommasepariert>}

-<Regelnummer>: 关闭规则 SA<rule number> 的检查。

+<Regelnummer>: 激活规则 SA<rule number> 的检查。

排除实现代码

要求:你有对话框 项目设置 启用规则。

  1. 添加编译指示 {analysis -<number>} 在包含您第一次不想检查的代码的代码行上方。例如,对于规则 SA0024

    代码行是代码片段的第一行,没有根据规则 24 进行检查。

  2. 添加编译指示 {analysis +<number>} 在包含第一次不检查的代码的代码行下方。

    示例:对于规则 SA0024

    上面的代码行是未根据规则 24 检查的代码片段的最后一行。

22. 示例:忽略无类型文字
{analysis -24}
nTest := 99;
iVar := INT#2;
{analysis +24}

规则 SA0024:无类型文字 禁用 2 行。尽管代码未更正为: nTest := DINT#99;



23. 示例:忽略多个规则
{analysis -10, -24, -18}
...
{analysis +10, +24, +18}

SA0010:只有一个组件的数组

SA0018:异常位访问

SA0024:无类型文字



提示

但是,您可以统治 SA0004对输出的多次写访问 不要通过编译指示禁用。

使用 pragma 从静态分析中排除编程对象

句法:

{attribute 'analysis' := '-<rule number>[,<other negative rule numbers, comma-separated>]'}

如果在编程对象的声明部分中包含属性 pragma,则整个编程对象的指定规则都将被排除。如果排除了多个规则,则这些规则必须用带减号和数字的逗号分隔。不需要用于开机的 pragma 语句。

24. 例子
{attribute 'analysis' := '-33, -31'}
TYPE LocalData :
STRUCT
        iLocal : INT;
        uiLocal : UINT;
        udiLocal : UDINT;
END_STRUCT
END_TYPE

结构中使用了规则 SA0033 和 SA0031 LocalData 忽略。

{attribute 'analysis' := '-100'}
big: ARRAY[1..10000] OF DWORD;

规则 SA0100 应用于阵列 big 忽略。