könnt ihr folgendes Phänomen unter PB x64 bestätigen?
Code: Alles auswählen
Structure bah
EndStructure
Macro SIZE
1 << 62 - 2
EndMacro
s = SIZE
Dim pfui.bah(SIZE)
Debug ArraySize(pfui())
Debug size
Debug SIZE
Das heißt ArraySize() gibt mir ein Element weniger aus als ich definiert habe.4611686018427387901
4611686018427387902
4611686018427387902
Dass das normalerweise anders ist, sieht man, wenn man in dem Macro einfach eine "10" oder sowas rein schreibt.
Das ist aber noch nicht das Kuriose. Schreibt man nämlich in das Macro "1 << 31", meckert der Debugger bei dem Dim, dass die Array-Größe nicht negativ sein darf. Schreibt man hingegen "1 << 31 - x" mit x > 1 funktioniert es wieder. Wenn man x = 1 setzt, geht es aber nicht. Selbst wenn "1 << 31 - 1" auf ein Long gecastet wird, ist der Wert nämlich positiv, was man hier sieht:
Code: Alles auswählen
l.l = 1 << 31
Debug l ;negativ
l - 1
Debug l ;positiv

Das war nicht alles. Jetzt schreiben wir den Code oben um, indem wir die letzten beiden Debug-Zeilen vor das Dim schieben:
Code: Alles auswählen
Structure bah
EndStructure
Macro SIZE
1 << 62 - 2
EndMacro
s = SIZE
Debug size
Debug SIZE
Dim pfui.bah(SIZE)
Debug ArraySize(pfui())
Für mich sieht das ganz nach einem fehlerhaften Check im Debugger aus. Aber vielleicht möchte das noch jemand für mich unter x86 Linux und Windows testen. Dann müsste man allerdings der Variablen "s" den Typ Quad zuordnen.