Avatar billede spectual Nybegynder
13. marts 2002 - 01:12 Der er 1 løsning

Hvad er det?

Følgende kode compiler fint i Visual C++:

void Test (int cnt, char *tekst, ...) {

    printf (tekst);
};

Denne funktion kan kaldes med et vilkårligt antal parametrer, så længe der er mindst 2.

Men hvad hedder den type erklæring og hvordan får man udskrevet de parametrer funktionen er kaldt med? (altså tekst)
Avatar billede spectual Nybegynder
13. marts 2002 - 01:43 #1
Det hedder sig at funktionen Test tager en række uspecificerede argumenter. I stdarg.h er defineret 3 makroer, som hjælper med at udlede de uspecificerede argumenter. De 3 makroer hedder va_start, va_arg og va_end. Så programmet kommer til at se sådan ud:

void Test (int cnt, char *tekst, ...) {

    char *tmp;

    va_list marker;

    printf ("count er %d\n", cnt);
    printf ("\nher kommer de restende argumenter:\n\n");

    va_start (marker, cnt);

    while ( (tmp = va_arg (marker, char* )) != NULL) {
        printf (tmp);
        printf ("\n");
    }

    va_end (marker);

};

int main(int argc, char* argv[])
{
    Test (10, "her", "er", "en", "raekke", "uspecificerede", "argumenter" , 56);

    return 0;
}

va_start tager 2 inputs: marker, som er en pointer til et argument og en pointer til det argument, marker skal starte efter.

va_arg tager 2 inputs: markøren fra før og en hvilken som helst type - her char*

va_arg returnerer argumentet - på en char* returnerer den NULL når der ikke er flere....

va_end tager 1 input: markøren og returner intet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester