musiałbyś zdeklarować sobie tą funkcję żeby miała opcjonalne parametry (jeśli ich nie podasz to podczas kompilacji kompilator sam je doda)
np. (w moim języku) jest tak
declare suma(a1:int, a2:int, opt a3=0:int, opt a4=0:int),int
wtedy można wywołać funkcję podając conajmniej 2 parametry
wynik = suma(3, 4)
kompilator sam wyśle na stos a3 i a4 jako zera (zera bo zero nie zmienia sumy). Funkcja wykonawcza powinna odbierać zawsze wszystkie parametry jeśli nie chcesz mieć problemów z okienkami z systemu
sub suma(a1:int, a2:int, a3:int, a4:int),int
return a1+a2+a3+a4
endsub
dodatkowe parametry powinny być takie, aby nie zmieniały wyniku lub by było wiadomo że taki parametr jest podstawiony przez kompilator
np. dla mnożenia każdy dodatkowy parametr powinien być=1
declare mul(a1:int, a2:int, opt a3=1:int),int
wynik = mul(100,5) // da wynik 500
wynik = mul(100,5, 2) // da wynik 1000
albo
declare pole(w:int, h:int, opt podzielprzez=0:int),int
jesli wywołasz pole(3, 4) to funkcja powinna tylko pomnożyć 3 i 4, bo wiadomo że przez zero nie da się podzielić (sprawdzasz trzeci parametr czy jest zakazany)
jest jeszcze takis coś, jak dowolna liczba parametrów
declare myfunction(rozkaz:int, count:int, ...),int
tutaj możesz zrobić tak:
wynik = myfunction(komenda, 0)
wynik = myfunction(komenda, 1, "hello")
wynik = myfunction(komenda, 2, "hello", " word")
wynik = myfunction(komenda, 4, "startserver", 80, 21, "runhide")
ale tu poszukaj w helpie o VA_START i podobnych
mam nadzieję że o to chodzi
a zerknij do stdio.h
_CRTIMP int __cdecl sprintf (char*, const char*, ...)
na podstawie piewszego stringu formatującego ta funkcja wie ile parametrów ma pobrać ze stosu
po naszemu to wygląda tak
DECLARE CDECL EXTERN sprintf alias _sprintf(buf as pointer,format as pointer,...)
DECLARE CDECL EXTERN printf alias _printf(...)
printf("%d\n", 29)
printf("hello")
funkcja _printf wyczai "%d" w stringu i pobierze parametr ze stosu
masz namiara