Bitte melde einen Bug. Der Compiler fügt das Array wohl nicht zum globalen Finalizer hinzu.
Weil es auch eine Variable ist. Eine typisierte Konstante ist letztlich eine Variable, bei welcher der Compiler abhängig von der $WriteableConst-Direktive den Schreibzugriff verweigert oder die Daten eventuell auch in einer ReadOnly Sektion der Binary ablegt (nur auf bestimmten Plattformen wie Windows).six1 hat geschrieben: So 2. Apr 2023, 11:44 für mich verhält sich dieses dynamische Array wie eine Variable, ohne dass diese beim Beenden der Funktion zerstört wird.
komplett sinnbefreit, oder?Code: Alles auswählen
const ar: array of byte = nil; begin SetLength(ar, Length(ar) + 1); ar[high(ar)]:=$A5; showmessage(inttostr(Length(ar))); SetLength(ar, 0); end;
Lokale, typisierte const Bezeichner sind noch dazu letztlich statische Variablen, da dies in TP Zeiten die einzige Möglichkeit war prozedur-/funktionslokale Variablen zu deklarieren. Sowohl Delphi als auch FPC sind hier entsprechend kompatibel dazu. Dieses Verhalten wird sich auch nicht ändern.
Ein derartig markierter Bezeichner wird bei Verwendung die Warnung „Symbol "xyz" is not implemented” generieren. Dies dient einfach dazu, dass man dem Benutzer kommunizieren kann, dass ein entsprechender Bezeichner auf der jeweiligen Plattform nicht implementiert ist.Mathias hat geschrieben: So 2. Apr 2023, 18:27Dies ist irgendwie auch doof und kann zu Fehlern führen. Somit ist es unter Umständen möglich eine wichtige Konstante zu ändern.Ja, es klingt komisch, eine Konstante zu ändern,
Da habe ich gerade was lustiges gefunden, " unimplemented", was das wieder ist ?Code: Alles auswählen
const CM_BASE = $B000; ... CM_GOTFOCUS = CM_BASE + 2 unimplemented; CM_LOSTFOCUS = CM_BASE + 3 unimplemented;