Sign in Join
Wiki copytemporary

@/fi

English · Français · Suomi · Русский

@

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:

pascal
program untypedAddressDemo(input, output, stderr);

procedure incrementIntByRef(const ref: PByte);
begin
    inc(ref^);
end;

var
    foo: integer;
begin
    foo := -1;
    incrementIntByRef(@foo);
    writeLn(foo);
end.

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

Lisää aiheesta


From the Free Pascal wiki, page "@/fi", as it stood on 2022-08-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.