010
26.07.2008, 19:53 Uhr
0xdeadbeef
Gott (Operator)
|
Naja, die rhetorische Frage scheint nicht genug gewesen zu sein, um den Groschen fallen zu lassen.
Was das eigentliche Problem angeht, ich vermute, dass es sich hier um einen "C++"-Compiler a la Visual C++ 6.0 handelt. Oder zumindest etwas in der Größenordnung - ein alter Haufen Softwareschrott, der vor der Standardisierung der Sprache und in einer Zeit geschrieben wurde, als derartige Spracherweiterungen die große Mode waren.
Ein HWND* ergäbe hier wenig Sinn, denn dann ginge jeder Zugriff darauf mitten ins Nirvana, was in aller Regel Segfaults auslösen dürfte - hier aber deckt sich das Array (bzw. der Speicherbereich direkt dahinter, denn das Array hat ja keine Größe) mit dem Rest des structs. Könnte ein Relikt eines dreckigen C-Hacks sein, obwohl man auch da eigentlich unions für solche Dinge benutzt.
Es gibt im POSIX-API einen ähnlichen Mechanismus. Naja, so halb - man reicht an msgsnd und msgrcv void-Zeiger weiter, die structs der Form
C++: |
struct msgbuf { long mtype; char mtext[1]; };
|
beinhalten. Dafür wird mehr Speicher als für das Struct notwendig alloziiert, und der Bereich hinter dem Struct wird als Fortsetzung des Arrays betrachtet. In C, gerade nah an der Maschine, kommen solche Dinge manchmal vor - im Grunde trennt man sich hier ein bisschen von höheren Sprachkonzepten und schreibt ungefähr zwei Stufen über nacktem Assembly - für den täglichen Gebrauch ist es aber nicht empfehlenswert. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |