Sådan bruges Variable parameter-funktioner i C ++

fleste funktioner acceptere et fast antal argumenter.Nogle programmer kræver funktioner dog at acceptere variable parametre.Et velkendt eksempel er print funktion af C. For sådanne tilfælde, C ++ tilbyder en kraftfuld løsning, der lader compileren dechifrere argumenterne under kørslen.Læs videre for en tutorial, der viser, hvordan man gennemfører sådanne funktioner.

hvad du har brug

  • Intermediate C ++
  • C ++ compiler med IDE, såsomMicrosoft Visual C ++

Instruktioner

  1. Tilføj STDARG.H biblioteket fil i dit program.Det er, hvor du definerer de makroer.Indsæt #include & lt på den første linje i filen,;stdarg.h & gt ;.

  2. Brug makroer va_arg, va_start og v_end der samarbejder med va_type i stdarg.h.

  3. Etablere en variabel af typen va_list til at fungere som en liste markør.

  4. Access de enkelte parametre ved at bruge va_arg makro.Find en måde at fortælle va_arg makro, hvilken type argumenter du ønsker det skal hente for at levere det rigtige antal bytes fra

    stakken.

  5. Cast resultatet fra trin 4 til den type, du ønsker det skal være.

  6. Ring til va_end makroen for at afslutte behandlingen af ​​variable parametre.

  7. Kig på nedenstående eksempel, der viser trin 2 til 6. Funktion myprintf accepterer et format streng, der angiver typen og placeringen af ​​hvert argument.Efter Formatstrengen er listen over argumenter.Funktionen udskriver argumenterne.For overskuelighedens skyld kan det kun proces int, float og char:

    // erklæring

    ugyldig myprintf (char -format, ...);

    // Defintion

    ugyldig myprintf (char
    -format, ...) {

    va_list vl;

    int i;

    va_start (vl, args);

    for (i = 0; args [i] = '\ 0';! ++ I) {

    union any_t {

    int i;

    float f;

    char c;

    } enhver;

    hvis (args [i] == 'I') {

    any.i = va_arg (vl, int); & lt; br & gt;
    printf ("% i \ n", any.i); & lt; br & gt;

    } else

    hvis (args [i] == 'F') {

    any.f = va_arg (vl, float); & lt; br & gt;
    printf ("% f \ n", any.f); & lt; br & gt;

    } else

    hvis (args [i] == 'c') {

    any.c = va_arg (vl, char); & lt; br & gt;
    printf ("% c \ n", any.c); & lt; br & gt;

    }

    else {

    smide SomeException;

    }

    va_end (VL);

    }

Ressourcer

  • Cplusplus.com tilbyder komplette C ++ tutorials.
  • Bruceeckel.com tilbyder to online bøger i C ++.
  • C / C ++ Brugere Journal, rettet mod C ++ udviklere
740
0
1
C / C ++ Programming