SA0019: Implizite Pointer-Konvertierungen

Funktion

Ermittelt implizit erzeugte Pointer-Datentyp-Konvertierungen.

Begründung

In TwinCAT sind Pointer nicht streng getypt und können einander beliebig zugewiesen werden. Dies wird häufig genutzt und deswegen auch nicht vom Compiler gemeldet. Allerdings kann es dadurch zu unerwünschten und unerwarteten Zugriffen kommen. Wenn man beispielsweise einem Pointer mit Typ POINTER TO BYTE den Typ POINTER TO DWORD zuweist, kann unerwünscht Speicher überschrieben werden.

Lassen Sie diese Regel deshalb in jedem Fall prüfen und unterdrücken Sie die Meldung nur in den Fällen, in denen Sie bewusst anders getypt auf einen Wert zugreifen wollen.

Implizite Datentyp-Konvertierungen werden mit einer anderen Meldung gemeldet.

Ausnahmen

1) BOOL ↔ BIT

2) Konvertierungen von und zu dem Datentyp POINTER TO BYTE werden von der Regel SA0019 nicht geprüft. Sie sind immer erlaubt.

Wichtigkeit

Hoch

PLCopen-Regel

CP25

Beispiele:

PROGRAM MAIN 
VAR
    nInt   : INT;
    nByte  : BYTE;
 
    pInt   : POINTER TO INT;
    pByte  : POINTER TO BYTE;
END_VAR
pInt  := ADR(nInt);
pByte := ADR(nByte);
 
pInt  := ADR(nByte);             // => SA0019
pByte := ADR(nInt);              // => SA0019
 
pInt  := pByte;                  // => SA0019
pByte := pInt;                   // => SA0019