logger schreiben (wie parameter handeln?)



  • ich würde mir für ein programm gerne einen logger schreiben der gewisse informationen nimmt und dann ausgibt (je nach einstellung etwa in die console oder file usw.)

    sollte eine ähnliche schnittstelle wie printf haben (also variable anzahl an parametern)
    etwa so:

    logMsg("error with dataset nr %i in subsection %i\n", xyz, abc, SEVERE);
    

    jetzt is die frage:
    -gibt es eine möglichkeit eine funktion mit variabler parameter anzahl in C zu schreiben (also so wie in c++ mit ..., va_list und va_start)? wenn ja, wie ? (im google hab i leider nix gefunden dazu alles nur c++)
    -gibt es soetwas ähnliches wie sprintf, nur dass es als return value die erzeugte zeichenkette liefert (sprinft liefert das ergebnis ja blöderweise als ersten parameter zurück und nicht als return)? wenn ich es mit sprintf lösen würde, dann wärs nicht mehr möglich alles in 1 statement zu verpacken



  • bernhard2004 schrieb:

    -gibt es eine möglichkeit eine funktion mit variabler parameter anzahl in C zu schreiben (also so wie in c++ mit ..., va_list und va_start)? wenn ja, wie ? (im google hab i leider nix gefunden dazu alles nur c++)

    Ja, gibt es, mit genau den selben "Funktionen" (genau genommen hat C++ die ganze va_list-Behandlung von C geerbt)

    -gibt es soetwas ähnliches wie sprintf, nur dass es als return value die erzeugte zeichenkette liefert (sprinft liefert das ergebnis ja blöderweise als ersten parameter zurück und nicht als return)? wenn ich es mit sprintf lösen würde, dann wärs nicht mehr möglich alles in 1 statement zu verpacken

    Gibt es von vornherein nicht, aber das könntest du dir selber schreiben (Tip: man: vsprintf).



  • CStoll schrieb:

    Ja, gibt es, mit genau den selben "Funktionen" (genau genommen hat C++ die ganze va_list-Behandlung von C geerbt)

    habs mit cstdarg als include verwendet statt stdarg.h, deshalb hat ers nicht gekannt, jetzt gehts fein thx 🙂



  • Ja, die <cxxx> Header sind neu in C++ - allerdings includieren sie letztendlich doch wieder die "alten" <xxx.h> Header aus C.


Anmelden zum Antworten