vložil Radek Červinka
1. prosince 2010 22:42
Asi jsem to minule špatně vysvětlil.
Implementace FormatSettings je provedena tak, že se jedná o záznam, který je pomocí direktivy absolute směrován na starší položky. Tj. např. FormatSettings.DecimalSeparator leží ve skutečnosti na stejné adrese jako DecimalSeparator, tj. při zápisu nebo čtení z obou proměnných se pracuje s jedním a tím konkrétním místem, jen s tím, že při použití DecimalSeparator je při kompilaci vypsán warning.
FormatSettings: TFormatSettings absolute CurrencyString;
Výše uvedený řádek značí, že linker má pro adresu FormatSettings použít adresu proměnné CurrencyString (první položka z FormatSettings je právě CurrencyString), tj. budou ukazovat na stejnou adresu a díky tomu, že složení záznamu přesně odpovídá pořadí CurrencyString a spol. je zaručeno to co jsem tvrdil na začátku, tj. bez zvláštních synchronizačních mechanismů obsahují obě proměnné stejnou hodnotu (protože ukazují na stejné místo v paměti). Viz SysUtils.pas.
Direktiva absolute je součástí jazyka od Turbo Pascalu. Kromě uvedené syntaxe se dá (dala) specifikovat přímo adresa. Tím jsem např. v dobách DOSu mohl šikovně přistupovat do videoram v grafickém módu jako do dvojrozměrného pole a tak jednoduše nastavovat konkrétní pixel.
V dnešní době se to používá jen ve speciálních případech - spíše pro různé oberličky jako nahoře uvedený případ nebo přístup datum bez přetypování v případě kdy by kompilátor mohl použít nějakou automatickou konverzi.