Skip to main content

SA0007: Adressoperator auf Konstanten

Ermittelt Codezeilen, an denen der Operator ADR bei einer Konstanten angewendet wird.

Begründung: Durch einen Pointer auf eine konstante Variable hebt man die CONSTANT-Eigenschaft der Variable auf. Über den Pointer kann die Variable verändert werden, ohne dass der Compiler dies meldet.

Ausnahme: In seltenen Fällen kann es sinnvoll sein, einen Pointer auf eine Konstante an eine Funktion zu übergeben. Es muss dann allerdings gewährleistet sein, dass diese Funktion den übergebenen Wert nicht ändert. Verwenden Sie wenn möglich VAR_IN_OUT CONSTANT.

Wichtigkeit: Hoch

Tipp

Wenn die Option Konstanten ersetzen in den Compileroptionen der Projekteinstellungen aktiviert ist, ist der Adressoperator für skalare Konstanten (Integer, BOOL, REAL) nicht erlaubt und ein Übersetzungsfehler wird ausgegeben. (Konstante Strings, Strukturen und Arrays haben immer eine Adresse.)

Beispiel 19. Beispiel
PROGRAM PLC_PRG
VAR CONSTANT
        c_iValue : INT := INT#15;
END_VAR
VAR
        poiValue : POINTER TO INT;
END_VAR
poiValue := ADR(c_iValue); // SA0007

Ausgabe unter Ansicht Meldungen:

  • sa_icon_message.png SA0007: Adressoperator auf konstante Variable 'c_iValue'