Vererbung und Übergabe von Strukturen in CoDeSys 3

Jochen

Level-1
Beiträge
131
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

kann mir jemand erklären, warum ich eine Struktur, die ich von einer anderen erben lasse, an eine Struktur vom Typ der Basisstruktur übergeben kann, obwohl diese ja kleiner ist, als die erbende Struct, allerdings nicht umgekehrt?
Also eine Struktur vom Basistyp lässt sich nicht an die Struktur vom vererbten Typ zuweisen, da gibt es einen Compilerfehler.

Macht in meinen Augen gar keinen Sinn, oder?

Gruß

Jochen
 
Sicherheit

Das wird allein aus Sicherheitsgründen so implementiert sein.

All diese Casts haben ja das Problem, dass verschiedene Memory Bereiche aufeinander abgebildet werden. So ein Downcast auf die Basis ist sicher, wenn der Compiler Entwickler das fachmännisch implementiert hat. Ein Upcast ist da schon heikel, das kann man ggf. machen, wenn man absolut sicher ist, aber bei einer SPS?

Andere Sprachen haben da dynamische Überprüfungen (dynamic_cast in C++ und Java) eingebaut, die z.B. einen NULL Pointer liefern, wenn es nicht passt.

Ich denke, was bei Siemens so ein Any Pointer ist, wird dort genau für solche wackeligen Constructs verwendet, kann aber auch ganz anders sein.

In C war es früher sehr üblich (void)* nach überall hin zu casten, da blieben halt immer mal wieder die Programme hängen und keiner wusste warum.
 
Zurück
Oben