Den Thread hier muss ich jetzt aber nochmal ausbuddeln. Das hatte ich ja damals total übersehen!
STARGÅTE hat geschrieben:Structure CharacterArray : c.c[0] : EndStructure
...
*Character\c[5] = 'i'
Und das funktioniert sogar! ... ?
Ein statisches Array in einer Struktur mit Größe #Null ist also sozusagen (ohne Überläufe zu berücksichtigen) unendlich groß?! Wie kommt man denn auf die Idee?! Ist das bei C etwa auch so? Steht ja in der PB-Doku, dass die Syntax von C übernommen wurde (deshalb ja auch das andere Verhalten relativ zu dynamischen Arrays). Da habe ich ja eine echte
Stargate-Perle übersehen!
(Sehr verspätet aber:) Ein
fettes Danke!
Da muss ich jetzt aber flott meinen Präprozessor überarbeiten!

Ich schiebe da beim Parsen immer die Zeiger vorwärts und rückwärts, dabei geht es viel komfortabler (und schätze mal auch effizienter)!
Gibt's da noch andere (C-)Tricks? Oder irgendwelche Fallen? Ich besitze da nur ein sehr flachen Wissen. Auf die schnelle habe ich zum Beispiel festgestellt, dass man sich im Fall von zwei "Null-Arrays" die
StructureUnion sparen kann, was ja nicht ganz unlogisch ist, wenn man bedenkt, dass die Struktur eine Größe von #Null hat, bzw. beide Arrays ein Offset von #Null.
Code: Alles auswählen
Structure CharacterArray
c.c[0]
s.s{1}[0]
EndStructure
Text$ = "BeispIel"
*Character.CharacterArray = @Text$
*Character\c[5] = 'i'
*Character\s[6] = "E"
Debug Text$
Debug ""
Debug SizeOf(CharacterArray)
Debug ""
Debug OffsetOf(CharacterArray\c)
Debug OffsetOf(CharacterArray\s)
Aber wie sieht das jetzt z.B. bei einer strukturierten
Variable statt einem strukturierten
Zeiger aus? Dann würde man ja eine Variable mit der Größe von Null Byte erstellen, was zwar von PB nicht angemeckert wird, aber zur Folge hat, dass man den Purifier aktivieren sollte.

Natürlich könnte ich jetzt mal fleißig drauf losprobieren, was wie wo wann passiert, aber es kann natürlich gut sein, dass ich da eine Falle oder einen Trick übersehe.