Como nota final a lo que dice Delphius, me gustaría agregar que los parámetros opcionales siempre deben ser los últimos.
Código Delphi
[-]
function Foo(Param1: TDato; var Param2: TDato; Param3: TDato = VALOR_DEFECTO): TOtroDato;
procedure Foo(Param1: TDato; var Param2: TDato; Param3: TDato = VALOR_DEFECTO);
function Foo(Param1: TDato; var Param2: TDato = VALOR_DEFECTO; Param3: TDato): TOtroDato;
procedure Foo(Param1: TDato; var Param2: TDato = VALOR_DEFECTO; Param3: TDato);