De flesta funktioner accepterar ett fast antal argument . Vissa program kräver dock funktioner för att acceptera variabla parametrar . Ett välkänt exempel är utskriftsfunktionen i C. För sådana fall , C + + erbjuder en kraftfull lösning som låter kompilatorn dechiffrera de argument vid körning . Läs vidare för en tutorial som visar hur man ska genomföra sådana funktioner . Saker du behöver
Intermediate C + + Review C + + kompilator med IDE , till exempel Microsoft Visual C + +
Visa fler instruktioner
1
Lägg till STDARG.H biblioteket filen i ditt program . Det är där du definiera makron . På första raden i filen , sätt # include .
2
Använd makron va_arg , va_start och v_end som samarbetar med va_type i stdarg.h .
3
Upprätta en variabel av typen va_list att fungera som en lista markör .
4
Åtkomst de enskilda parametrarna med hjälp av va_arg makro. Hitta ett sätt att berätta den va_arg makro vilken typ av argument du vill att det ska hämta för att leverera rätt antal byte från stacken .
5
Kasta resultatet från steg 4 till den typ du vill ha det att vara .
6
Ring va_end makrot att avsluta behandlingen av variabla parametrar .
7
Titta på exemplet nedan som visar steg 2 till 6 . Funktionen accepterar myprintf ett format sträng som anger vilken typ och position för varje argument . Efter formatsträng är listan över argument . Funktionen skriver argumenten. För enkelhets skull kan bara bearbeta int , float och char :
//deklaration
void myprintf ( char * format , ... ) , kommenterar: //Definition
void myprintf ( char * format . .. ) {
va_list vl ,
int i;
va_start ( VL , args ) ;
for (i = 0 ; args [ i] = ' \\ 0 ' ; ! + + i) {
fackliga any_t {
int i;
float f ,
char c ,
} någon ,
om ( args [ i] == ' I ' ) {
any.i = va_arg ( VL , int ) ;
printf ( " % i \\ n " , any.i ) ;
} else
om ( args [ i] == ' f ' ) {
any.f = va_arg ( VL , float ) ,
printf ( " % f \\ n " , any.f ) ;
} else
om ( args [ i] == ' c ' ) {
any.c = va_arg ( VL , röding ) ,
printf ( " % c \\ n " , any.c ) ;
}
else {
kasta SomeException ;
}
va_end ( vl ) ,
}