Free Pascal: Int64 típus nem sorszámozott, milyen hátrányokkal járhat ez, ha sorszámozott típusoknak megfelelő eljárásokat használok rá?
Az alábbi, sorszámozott típusokról szóló dokumentum:
Ezt írja:
With the exception of int64, qword and Real types, all base types are ordinal types. Ordinal types have the following characteristics:
1. Ordinal types are countable and ordered, i.e. it is, in principle, possible to start counting them one by one, in a specified order. This property allows
the operation of functions as Inc, Ord, Dec on ordinal types to be defined.
2. Ordinal values have a smallest possible value. Trying to apply the Pred function on the smallest possible value will generate a range check error if
range checking is enabled.
3. Ordinal values have a largest possible value. Trying to apply the Succ function on the largest possible value will generate a range check error if range
checking is enabled.
Kérdésem az lenne, hogy Int64 változót ha használok programban olyan nagy számokra, amit longint már nem képes tárolni, akkor esetleg a jövő Pascal változatokban ez a funkció majd működésképtelenné válhat?
Most még működik az inc és dec az int64 változó esetén....
Azt tudom, hogy a filesize() és filepos() is int64 visszatérési értékkel rendelkezik, valamint még biztos van jó pár ilyen, de ott nem használnak a sorszámozott típusra történő hivatkozást, mint pl. inc vagy dec.
Ami már most sem működik (de a fordító jelzi is a problémát):
program Sorszam_teszt;
var
i : int64;
begin
for i := 1 to 10 do
Write(i:5);
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
Nem ismerek más típust ami longint fölött tárolna számokat.
A példaprogrammal azt kívántam bemutatni, hogy ebben az esetben szól a fordító, de az inc és dec esetén nem (amik szintén sorszámozott típusokhoz vannak), viszont működnek...
qword esetén ugyanez a helyzet.
Mégis mindkettő működik.
program inkrement;
var
q:qword;
i:int64;
begin
q:=9999999999;
i:=9999999999;
inc(i);
inc(q);
writeln(i);
writeln(q);
dec(q,7000000000);
dec(i,7000000000);
writeln(i);
writeln(q);
readln;
end.
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz1.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz2.png)
![*](http://static.gyakorikerdesek.hu/p/vsz0.png)
A fordító azért nem jelez hibát, mivel elvileg lehetséges, hogy az Inc() és Dec() eljárások 'elbánjanak' a QWord és Int64 típusú számokkal - Free Pascal -. Ha ciklusba kell - bár nem értem mi a fenének - mondjuk lehetnek spec. esetek, de ott is kiküszöbölhető - akkor while.... Inc(i) vagy hasonlók és mily okból kéne egy ciklust 18446744073709551615-ször lefuttatni.
Egy programozó a korlátozott kereteken belül is feltalálja magát, ha kell :)
A ciklust csak példának írtam, hogy ott rögtön kiírja: "ordinary expression", nem azért, mert ciklusban akartam volna használni az int64 változót, csak rá akartam mutatni hogy ciklusban jelzi hogy sorszámozott típust vár, inc és dec esetén nem.
Köszönöm a válaszokat.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!