Można pominąć specyfikację typu parametru podczas deklaracji parametrów z użyciem słów kluczowych var, const i out. (Parametry przekazywane przez wartość muszą mieć określony typ.) Na przykład, zapis:
procedure proc(const C);
deklaruje procedurę proc, która akceptuje parametr dowolnego typu. W wywołaniu takiej procedury, nie można zamieszczać jako parametru aktualnego numerału (liczby) ani numerycznej stałej niezdefiniowanego typu.
Wewnątrz procedury/funkcji parametry o niezdefiniowanym typie są niekompatybilne z każdym typem. Aby operować na takich parametrach należy dokonać rzutowania typu.
Kompilator nie może weryfikować poprawności operacji wykonywanych na parametrze o niezdefiniowanym typie.
W przykładzie, funkcja Equal porównuje wyspecyfikowaną liczę bajtów dwóch zmiennych.
function Equal( Size: Integer; var Source, Dest): Boolean; type TBytes = array[0..MaxInt - 1] of Byte; var N: Integer; begin N := 0; while (N < Size) and (TBytes(Dest)[N] = TBytes(Source)[N]) do Inc(N); Equal := N = Size; end;
Mając dane deklaracje:
type TVector = array[1..10] of Integer; TPoint = record X, Y: Integer; end; var Vec1, Vec2: TVector; N: Integer; P: TPoint;
można dokonać następujących porównań funkcją Equal:
Equal(Vec1, Vec2, SizeOf(TVector)) // porównanie Vec1 i Vec2 Equal(Vec1, Vec2, SizeOf(Integer) * N) // porównanie pierwszych N elementów Vec1 i Vec2 Equal(Vec1[1], Vec1[6], SizeOf(Integer) * 5) // porównanie pierwszych 5 i ostatnich 5 el. Vec1 Equal(Vec1[1], P, 4) // porównanie Vec1[1] i P.X oraz Vec1[2] i P.Y