Difference between revisions of "@/fi"

From Lazarus wiki
Jump to navigationJump to search
 
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" enclose="none">@</syntaxhighlight> palauttaa [[Variable/fi|muuttujan]], [[Procedure/fi|aliohjelman]] tai [[Function/fi|funktion]] osoitteen.
+
Osoiteoperaattori <syntaxhighlight lang="pascal" inline>@</syntaxhighlight> palauttaa [[Variable/fi|muuttujan]], [[Procedure/fi|aliohjelman]] tai [[Function/fi|funktion]] osoitteen.
  
Normaalisti <syntaxhighlight lang="pascal" enclose="none">@</syntaxhighlight> palauttaa ''tyypittömän'' [[Pointer/fi|osoittimen]] arvon.
+
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" enclose="none">{$typedaddress on}</syntaxhighlight>]].
+
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" enclose="none">0</syntaxhighlight> (nolla) tulostuu, mutta ohjelma tulostaa <syntaxhighlight lang="pascal" enclose="none">-256</syntaxhighlight>. Kun  
+
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" enclose="none">{$typedaddress on}</syntaxhighlight> niin käätäminen keskeytyy yhteensovittomaan tyyppivirheeseen.
+
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" enclose="none">@</syntaxhighlight> (AT merkki): arvo on <syntaxhighlight lang="pascal" enclose="none">64</syntaxhighlight>.
+
* [[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" enclose="none">@</syntaxhighlight> operator]
+
* [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" enclose="none">@</syntaxhighlight>)]
+
* [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" enclose="none">system.addr</syntaxhighlight>}}
+
* {{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 on 64.

Lisää aiheesta


navigation bar: topic: Pascal symbols
single characters

+ (plus)  •  - (minus)  •  * (asterisk)  •  / (slash)
= (equal)  •  > (greater than)  •  < (less than)
. (period)  •  : (colon)  •  ; (semi colon)
^ (hat)  •  @ (at)
$ (dollar sign)  •  & (ampersand)  •  # (hash)
' (single quote)

character pairs

<> (not equal)  •  <= (less than or equal)  •  := (becomes)  •  >= (greater than or equal)

 •  >< (symmetric difference)  •  // (double slash)