EremittPåTur Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 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? mvh Vidar (Z) Lenke til kommentar
GeirGrusom Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 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
EremittPåTur Skrevet 24. juli 2007 Forfatter Del Skrevet 24. juli 2007 Omtrent så langt strekker og min kunskap seg, men så var det dette med antall og parameter type. Hvordan løses dette? Lenke til kommentar
Giddion Skrevet 24. juli 2007 Del Skrevet 24. juli 2007 Vel jeg kan nok om det til å bruke det og det holder for meg 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
Patience Skrevet 27. juli 2007 Del Skrevet 27. juli 2007 *** Tråden er gjenåpnet. Diskutèr lystig :-) *** Lenke til kommentar
Sokkalf™ Skrevet 29. juli 2007 Del Skrevet 29. juli 2007 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå