[BraLUG] C-Frage: Funktion/Prozedur mit variabler Parameteranzahl

Markus Dahms mad at automagically.de
Do Jan 17 17:52:03 CET 2008


Hallo Uwe,

> ich habe mal wieder eine C-Frage:
> Ich möchte z.B. gern diese 3 Zeilen:
> 
> char s[40];
> sprintf(s, "%d %d\n\r", var1, var2);
> uart_puts(s);
> 
> in einer Prozedur zusammenfassen, bei der der Format-String und die
> formatiert auszugebenden Variablen als Parameter zu übergeben sind. Wie
> man sieht (sprintf) ist die Anzahl der Parameter nach dem Formatstring
> variabel. Wie macht man das?

mit "variable argument lists". Folgender Schnipsel geht durch den avr-gcc
durch -- ist aber nicht laufzeit-getestet ;).

8<-------------------------------------------------------------------

#include <stdio.h>

void sputf(const char *format, ...)
{
    char s[40];
    va_list va;

    va_start(va, format);
    vsprintf(s, format, va);
    va_end(va);
	uart_put(s);
}

8<-------------------------------------------------------------------

Markus

-- 
C++ is a horrible language. It's made more horrible by the fact that a lot of
substandard programmers use it, to the point where it's much much easier to
generate total and utter crap with it. Quite frankly, even if the choice of C
were to do *nothing* but keep the C++ programmers out, that in itself would be
a huge reason to use C.                                      -- Linus Torvalds



Mehr Informationen über die Mailingliste Bralug