Difference between revisions of "@/fi"
Line 3: | Line 3: | ||
<div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">@</div> | <div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">@</div> | ||
− | Osoiteoperaattori <syntaxhighlight lang="pascal" | + | Osoiteoperaattori <syntaxhighlight lang="pascal" inline>@</syntaxhighlight> palauttaa [[Variable/fi|muuttujan]], [[Procedure/fi|aliohjelman]] tai [[Function/fi|funktion]] osoitteen. |
− | Normaalisti <syntaxhighlight lang="pascal" | + | Normaalisti <syntaxhighlight lang="pascal" inline>@</syntaxhighlight> palauttaa ''tyypittömän'' [[Pointer/fi|osoittimen]] arvon. |
Jos käsittellään osoittimia paljon ja halutaan vähentää virheitä jotka johtuvat viittauksista väärään tyyppiseen kohteeseen | Jos käsittellään osoittimia paljon ja halutaan vähentää virheitä jotka johtuvat viittauksista väärään tyyppiseen kohteeseen | ||
− | käytetään [[Compiler directive/fi|kääntäjän ohjetta]] [[sTypedaddress|<syntaxhighlight lang="pascal" | + | käytetään [[Compiler directive/fi|kääntäjän ohjetta]] [[sTypedaddress|<syntaxhighlight lang="pascal" inline>{$typedaddress on}</syntaxhighlight>]]. |
Seuraavassa on esimerkki, mikä tuottaa tyypittömien osoittimien kanssa kelvollista ja toiminnallista koodia, mutta antaa virheellisen tuloksen: | Seuraavassa on esimerkki, mikä tuottaa tyypittömien osoittimien kanssa kelvollista ja toiminnallista koodia, mutta antaa virheellisen tuloksen: | ||
Line 27: | Line 27: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Tarkoituksena oli, että <syntaxhighlight lang="pascal" | + | Tarkoituksena oli, että <syntaxhighlight lang="pascal" inline>0</syntaxhighlight> (nolla) tulostuu, mutta ohjelma tulostaa <syntaxhighlight lang="pascal" inline>-256</syntaxhighlight>. Kun |
− | lisätään koodiin <syntaxhighlight lang="pascal" | + | lisätään koodiin <syntaxhighlight lang="pascal" inline>{$typedaddress on}</syntaxhighlight> niin käätäminen keskeytyy yhteensovittomaan tyyppivirheeseen. |
Tavallisesti halutaan viimeksi mainittu käyttäytyminen ([[Compile_time/fi|käännösaikainen]] virhe) sen sijaan, että tuhlataan aikaa tuntikausia virheenkorjaukseen. | Tavallisesti halutaan viimeksi mainittu käyttäytyminen ([[Compile_time/fi|käännösaikainen]] virhe) sen sijaan, että tuhlataan aikaa tuntikausia virheenkorjaukseen. | ||
== Muita huomautuksia == | == Muita huomautuksia == | ||
− | * [[ASCII/fi|ASCII]]:ssa merkin <syntaxhighlight lang="pascal" | + | * [[ASCII/fi|ASCII]]:ssa merkin <syntaxhighlight lang="pascal" inline>@</syntaxhighlight> (AT merkki): arvo on <syntaxhighlight lang="pascal" inline>64</syntaxhighlight>. |
== Lisää aiheesta == | == Lisää aiheesta == | ||
− | * [https://www.freepascal.org/docs-html/ref/refse83.html The <syntaxhighlight lang="pascal" | + | * [https://www.freepascal.org/docs-html/ref/refse83.html The <syntaxhighlight lang="pascal" inline>@</syntaxhighlight> operator] |
− | * [https://www.freepascal.org/docs-html/prog/progsu75.html Typed address operator (<syntaxhighlight lang="pascal" | + | * [https://www.freepascal.org/docs-html/prog/progsu75.html Typed address operator (<syntaxhighlight lang="pascal" inline>@</syntaxhighlight>)] |
− | * {{Doc|package=RTL|unit=system|identifier=addr|text=<syntaxhighlight lang="pascal" | + | * {{Doc|package=RTL|unit=system|identifier=addr|text=<syntaxhighlight lang="pascal" inline>system.addr</syntaxhighlight>}} |
{{Symbols}} | {{Symbols}} |
Latest revision as of 16:15, 6 August 2022
│
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Osoiteoperaattori @
palauttaa muuttujan, aliohjelman tai funktion osoitteen.
Normaalisti @
palauttaa tyypittömän osoittimen arvon.
Jos käsittellään osoittimia paljon ja halutaan vähentää virheitä jotka johtuvat viittauksista väärään tyyppiseen kohteeseen
käytetään kääntäjän ohjetta {$typedaddress on}
.
Seuraavassa on esimerkki, mikä tuottaa tyypittömien osoittimien kanssa kelvollista ja toiminnallista koodia, mutta antaa virheellisen tuloksen:
1program untypedAddressDemo(input, output, stderr);
2
3procedure incrementIntByRef(const ref: PByte);
4begin
5 inc(ref^);
6end;
7
8var
9 foo: integer;
10begin
11 foo := -1;
12 incrementIntByRef(@foo);
13 writeLn(foo);
14end.
Tarkoituksena oli, että 0
(nolla) tulostuu, mutta ohjelma tulostaa -256
. Kun
lisätään koodiin {$typedaddress on}
niin käätäminen keskeytyy yhteensovittomaan tyyppivirheeseen.
Tavallisesti halutaan viimeksi mainittu käyttäytyminen (käännösaikainen virhe) sen sijaan, että tuhlataan aikaa tuntikausia virheenkorjaukseen.
Muita huomautuksia
- ASCII:ssa merkin
@
(AT merkki): arvo on64
.
Lisää aiheesta
single characters |
|
character pairs |
|