Gå til innhold

Anbefalte innlegg

Heisan

 

En ting jeg ikke helt har forstått bruken av når det gjelder C/C++ er ...

Forvirret? Det er jeg og.

 

For eksempel så er deklarasjonen av funksjon printf() omtrent slik:

 

int printf(const char *_Format, ...)

 

Hvilket betyr i praksis at printf() har en veldefinert input, en char pointer, men kan i tillegg motta flere ukjente inputs, markert med tre prikker. Dere kjenner alle printf() og bruken av denne og vet at antal inputs varierer alt etter humør og tanke.

 

Har imidlertid ikke funnet noen god beskrivelse på "tre prikker" deklarasjonen eller bruken.

 

main() har jo som kjent muligheten for input via argc, og argv[].

int main(int argc, char *argv[])

 

Fungerer ... noenlunde på samme måte? Hvordan får man tak i typen (char, int, float) til overført argument, antal argumenter, osv, i den funksjonen man skal skrive? :hmm:

 

mvh

Vidar (Z)

Lenke til kommentar
Videoannonse
Annonse

Bruken er for funksjoner som tar et ukjent antall parameter, det som i hovedsak skjer, er at nå man kaller en slik funksjon, legger programmer først antall parameter som følger på stack (sikkert noen som har litt mer utfyllende informasjon her)

 

De fleste andre språk har en lignende funksjon, i C# heter det params f.eks.

Lenke til kommentar

Vel jeg kan nok om det til å bruke det og det holder for meg :D

 

Hjelper disse linkene.

va_arg, va_end, va_start

va_arg

 

Her er litt kode som motar var arg og sender de videre mm.

void YPrintToDebuger(Y_UINT ModuleID,Y_UINT State,const char* pString,...)
{
//...
char PrintBuffer[1024];

va_list ap;
va_start(ap, pString);
 vsprintf_s(PrintBuffer,sizeof(PrintBuffer),pString,ap);
va_end(ap);

//...
}

Lenke til kommentar

Barskt Giddion, brukte nettopp infoen din til å lage en funksjon som printer i farger (ved hjelp av escape characters i linux/unix)

 

Klikk for å se/fjerne innholdet nedenfor
#include <stdio.h>
#include <stdarg.h>

#define COLOR_RESET "\033[0m"


char colormap[16][8] = {
   "\033[0;30m", "\033[0;31m", "\033[0;32m", "\033[0;33m",
   "\033[0;34m", "\033[0;35m", "\033[0;36m", "\033[0;37m",
   "\033[1;30m", "\033[1;31m", "\033[1;32m", "\033[1;33m",
   "\033[1;34m", "\033[1;35m", "\033[1;36m", "\033[1;37m"
};

void print_color(int color, char *string, ...)
{
   va_list ap;
   va_start(ap, string);
   printf("%s", colormap[color]);
   vprintf(string, ap);
   printf("%s", COLOR_RESET);
   va_end(ap);
}


int main(int argc, char *argv[])
{
   int i = 0;

   for (i = 0; i < 16; i++) {
print_color(i, "Test, farge nr : %i\n", i);
   }

   return;
}

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...