Functie cu numar variabil de parametri - C/C++/ASM
In topicul anterior am vorbit despre modurile in care putem extrage parametrii de pe stiva. Cum in C nu puteam sti exact cati parametri sa luam, am apelat la 2 artificii . Ori stiam cati parametri urmau sa apara, ori stiam unde sa ne oprim . C/C++ -ul nu permite in mod normal sa cunoastem numarul de parametri cu care am apelat o functie ( cu numar variabil de parametri ) . Insa acest lucru se poate rezolva cu ajutorul ASM. Nu vom mai folosi stdarg.h , prin urmare nu mai avem nevoie de acel prim parametru static al functiei. Urmatoarea functie afiseaza toti parametrii cu care a fost apelata...
-
void functie(...)
-
{
-
unsigned char nr_parametri;
-
int *parametru,i;
-
-
_asm
-
{
-
mov eax,[ebp+4]
-
add eax,2
-
mov al,[eax]
-
shr al,2
-
mov nr_parametri,al
-
mov parametru,ebp
-
add parametru,8
-
}
-
-
for(i=0;i<nr_parametri;i++)
-
cout<<parametru[i]<<" ";
-
}
Acum,in vectorul parametru, avem toti parametrii si ne putem juca dupa cum dorim cu ei ... va ramane ca tema sa modificati functia astfel incat sa calculeze suma![]()