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_VARpInt := ADR(nInt);
pByte := ADR(nByte);
pInt := ADR(nByte); // => SA0019
pByte := ADR(nInt); // => SA0019
pInt := pByte; // => SA0019
pByte := pInt; // => SA0019