String effizient erweitern
-
Hallo Zusammen,
bin dabei ein Log-Modul zu implementieren, welches je nach schwere des Fehlers den String anders formatieren soll.
Dafür habe ich als Grundgerüst entwickelt:
void Log(severity, const char* format, ...) { ... iWritten = vsnprinutf(buffer, BUFFER_LEN, format, args); ... }
Der Aufruf erfolgt dann zum Beispiel:
Log(1, "Hallo Welt %d", 10);
Das funktioniert im Prinzip wie printf. Die Ausgabe lautet also 'Hallo Welt 10'.
Jetzt sollte aber je nach severity der String noch um "xyz", "abc" oder anderes am Anfang erweitert werden.
Also es würde dann z.B. lauten 'xyzHallo Welt 10'
Prinzipiell mit den C Bibliotheks Boardmitteln ginge das alles schon, ist mir aber leider zu ineffizient (muss tatsächlich auf Performance gucken, malloc o.ä. ist ebenfalls nicht erlaubt).
Jetzt frage ich mich, ob man das nicht irgendwie geschickt mit dem Präprozessor machen kann (Performance geht hier vor Schönheit), damit das funktioniert, weil prinzipiell handelt es sich ja um zwei konstante strings die einfach miteinander verknüpft werden. Leider bin ich aber nicht der große Präprozessor Experte.
Fällt euch ein Trick ein, wie man das lösen könnte?
Vielen Dank schon mal!
-
Du brauchst doch nicht den String erweitern, sondern "druckst" einfach vorher den geforderten String aus:
const char * const texts[] = { "Error", "Warning", "Info" }; fputs(texts[severity], stdout); // natürlich noch mit Index-Überprüfung vorher! // ...
Und die Severity würde ich als enum deklarieren!
-
Oder du schreibst erst "xyz" in den
buffer
und fängst beibuffer+strlen("xyz")
an zu schreiben.