Pragmas und Attribute für Static Analysis Light
Mithilfe eines Pragmas bzw. eines Attributs können Sie Codeteile aus der Prüfung ausklammern. Verwenden Sie das Pragma {analysis …}, um Kodierregeln im Implementierungsteil auszuschalten und das Attribut {attribute 'analysis' := '...'}, um Kodierregeln im Deklarationsteil auszuschalten.
Voraussetzung: Sie haben die Regeln in den Projekteigenschaften aktiviert.
Außerdem können Sie das Attribut {attribute 'no-analysis'} verwenden, um Programmierobjekte von der Statischen Analyse auszuschließen.
![]() | Regeln, die in den Projekteigenschaften deaktiviert sind, können Sie auch nicht über Pragma oder Attribut aktivieren. |
![]() | Regel SA0004 (Mehrfacher Schreibzugriff auf Ausgang) kann nicht über Pragma deaktiviert werden. |
Pragma {analysis ...}
Das Pragma {analysis -/+<Regelnummer>} können Sie im Implementierungsteil eines Programmierbausteins verwenden, um einzelne Kodierregeln für die nachfolgenden Codezeilen auszuschalten. Sie deaktivieren Codierregeln durch die Angabe der Regelnummern und einem vorangestellten Minuszeichen (“-”). Zur Aktivierung wird ein Pluszeichen (“+”) vorangestellt. Mit Hilfe einer Kommaseparierung können Sie im Pragma beliebig viele Regeln angeben.
Einfügeort:
- Deaktivierung von Regeln: Im Implementierungsteil vor der ersten Codezeile, ab der die Codeanalyse deaktiviert wird, mit {analysis - ...}.
- Aktivierung von Regeln: Nach der letzten Zeile der Deaktivierung mit {analysis + ...}.
- Für die Regel SA0164 kann das Pragma auch im Deklarationsteil vor einem Kommentar eingefügt werden.
Syntax:
- Deaktivierung von Regeln:
- eine Regel: {analysis -<Regelnummer>}
- mehrere Regeln: {analysis -<Regelnummer>, -<weitere Regelnummer>, -<weitere Regelnummer>}
- Aktivierung von Regeln:
- eine Regel: {analysis +<Regelnummer>}
- mehrere Regeln: {analysis +<Regelnummer>, +<weitere Regelnummer>, +<weitere Regelnummer>}
Beispiele:
Sie möchten Regel 24 (nur getypte Literale erlaubt) für eine Zeile deaktivieren (d.h. es ist in diesen Zeilen nicht nötig, "nTest := DINT#99" zu schreiben) und danach wieder aktivieren:
{analysis -24}
nTest := 99;
{analysis +24}
nVar := INT#2;Angabe mehrerer Regeln:
{analysis -10, -24, -18}Attribut {attribute 'analysis' := '...'}
Das Attribut {attribute 'analysis' := '-<Regelnummer>'} können Sie verwenden, um bestimmte Regeln für einzelne Deklarationen oder für ein ganzes Programmierobjekt abzuschalten. Sie deaktivieren die Kodierregel durch die Angabe der Regelnnummer(n) und einem vorangestellten Minuszeichen. Sie können im Attribut beliebig viele Regeln angeben.
Einfügeort:
oberhalb der Deklaration eines Programmierobjekts oder in der Zeile oberhalb einer Variablendeklaration
Syntax:
- eine Regel: {attribute 'analysis' := '-<Regelnummer>'}
- mehrere Regeln: {attribute 'analysis' := '-<Regelnummer>, -<weitere Regelnummer>, -<weitere Regelnummer>'}
Beispiele:
Sie möchten Regel 33 (Nicht verwendete Variablen) für alle Variablen der Struktur ausschalten.
{attribute 'analysis' := '-33'}
TYPE ST_Sample :
STRUCT
bMember : BOOL;
nMember : INT;
END_STRUCT
END_TYPE
Sie möchten die Prüfung von Regel 28 (Überlappende Speicherbereiche) und von Regel 33 (Nicht verwendete Variablen) für die Variable nVar1 ausschalten.
PROGRAM MAIN
VAR
{attribute 'analysis' := '-28, -33'}
nVar1 AT%QB21 : INT;
nVar2 AT%QD5 : DWORD;
nVar3 AT%QB41 : INT;
nVar4 AT%QD10 : DWORD;
END_VAR
Sie möchten Regel 6 (Gleichzeitiger Zugriff) für eine globale Variable ausschalten, sodass keine Fehlermeldung generiert wird, wenn die Variable von mehr als einer Task geschrieben wird.
VAR_GLOBAL
{attribute 'analysis' := '-6'}
nVar : INT;
bVar : BOOL;
END_VARAttribut {attribute 'no-analysis'}
Das Attribut {attribute 'no-analysis'} können Sie verwenden, um ein gesamtes Programmierobjekt von der Prüfung durch die Statische Analyse auszuschließen. Für dieses Programmierobjekt wird die Prüfung der Kodierregeln, der Namenskonventionen und der unzulässigen Symbole nicht durchgeführt.
Einfügeort:
oberhalb der Deklaration eines Programmierobjekts
Syntax:
{attribute 'no-analysis'}
Beispiele:
{attribute 'qualified_only'}
{attribute 'no-analysis'}
VAR_GLOBAL
…
END_VAR{attribute 'no-analysis'}
PROGRAM MAIN
VAR
…
END_VAR