String bauen
-
Das wollte ich eigentlich vermeiden;/
-
Belli schrieb:
Genau, Beispiele siehe hier:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_21.shtmlUnsinniger JW Pfusch. Nicht empfehlenswert.
-
char str[200]="Fehlermeldung xy: "; logMessage(LogError, (sprintf(str+strlen(str),"%i\n",id),str) );
oder wahlweise mit der Nichtstandardfunktion itoa/_itoa entsprechend:
logMessage(LogError, (itoa(id,str+strlen(str),10),str) );
-
Bauer1234 schrieb:
Das wollte ich eigentlich vermeiden;/
Na so schwierig ist das auch nicht.
#include <stdarg.h> #include <stdio.h> int logprintf(int LogError, char *format, ...) { va_list marker; char str[200]; // oder was du willst va_start(marker,format); vsprintf(str, format, marker); va_end(marker); // fputs(buff,stdout); logMessage(LogError, str); return 0; }
-
Wutz schrieb:
Belli schrieb:
Genau, Beispiele siehe hier:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_21.shtmlUnsinniger JW Pfusch. Nicht empfehlenswert.
Nicht alles, was JW benutzt, ist automatisch Müll. Was stört dich an einer Logfunktion in dieser Form?
-
DirkB schrieb:
Bauer1234 schrieb:
Das wollte ich eigentlich vermeiden;/
Na so schwierig ist das auch nicht.
#include <stdarg.h> #include <stdio.h> int logprintf(int LogError, char *format, ...) { va_list marker; char str[200]; // oder was du willst va_start(marker,format); vsprintf(str, format, marker); va_end(marker); // fputs(buff,stdout); logMessage(LogError, str); return 0; }
Es geht mir nicht ums schwierig. Ich hab schon zig mal Funktionen mit var args geschrieben. Ich finde es nur unschoen, dass sich die LOG Funktion die Meldung erstmal selber zusammenfrickeln soll...
Aber geht wohl nicht anders.
-
Bauer12345 schrieb:
Ich finde es nur unschoen, dass sich die LOG Funktion die Meldung erstmal selber zusammenfrickeln soll...
Du findest es schöner, wenn du jedes Mal an jeder zu loggenden Stelle den String zusammenfriemeln musst, um ihn an eine Logfunktion zu übergeben, die dann selbst nicht mehr viel macht?
-
_matze schrieb:
Wutz schrieb:
Belli schrieb:
Genau, Beispiele siehe hier:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_21.shtmlUnsinniger JW Pfusch. Nicht empfehlenswert.
Nicht alles, was JW benutzt, ist automatisch Müll. Was stört dich an einer Logfunktion in dieser Form?
Was er nutzt ist kein Müll, was ich auch nicht gesagt habe (Standardbibliotheksfunktionen sind kein Müll), aber wie er es benutzt und seine Erklärungsversuche drumherum lassen auf tiefgreifendes Unverständnis bei der Softwareentwicklung im Allgemeinen und C im Besonderen schließen und ist somit für Anfänger/Hilfesuchende nicht empfehlenswert, da sie nicht in der Lage sind, diesen Unsinn und falsche Aussagen zu filtern.
Auch o.g. Seite enthält falsche Aussagen.
Deshalb sind JW Aussagen per se nicht empfehlenswert.
-
Wutz schrieb:
_matze schrieb:
Wutz schrieb:
Belli schrieb:
Genau, Beispiele siehe hier:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_21.shtmlUnsinniger JW Pfusch. Nicht empfehlenswert.
Nicht alles, was JW benutzt, ist automatisch Müll. Was stört dich an einer Logfunktion in dieser Form?
Was er nutzt ist kein Müll, was ich auch nicht gesagt habe (Standardbibliotheksfunktionen sind kein Müll), aber wie er es benutzt und seine Erklärungsversuche drumherum lassen auf tiefgreifendes Unverständnis bei der Softwareentwicklung im Allgemeinen und C im Besonderen schließen und ist somit für Anfänger/Hilfesuchende nicht empfehlenswert, da sie nicht in der Lage sind, diesen Unsinn und falsche Aussagen zu filtern.
Auch o.g. Seite enthält falsche Aussagen.
Deshalb sind JW Aussagen per se nicht empfehlenswert.Dann musst du sowas in Zukunft am besten deutlicher sagen. Es kam so rüber (bei mir zumindest), als wolltest du (Log-)funktionen mit variabler Parameteranzahl generell als Pfusch bezeichnen.
-
_matze schrieb:
Bauer12345 schrieb:
Ich finde es nur unschoen, dass sich die LOG Funktion die Meldung erstmal selber zusammenfrickeln soll...
Du findest es schöner, wenn du jedes Mal an jeder zu loggenden Stelle den String zusammenfriemeln musst, um ihn an eine Logfunktion zu übergeben, die dann selbst nicht mehr viel macht?
Ne, is auch nicht schoen.
Das Problem ist, dass ich die Funktion mit einem Makro aufrufe, sprich so:
#define LOG_DEBUG(message) logMessage(LogMessageDebug, message); #define LOG_DEBUG(message) logMessage(LogMessageDebug, message); // Aufruf: string bauen LOG_DEBUG(str)
(Der 1. Wert ist ein enum). Funktioniert das mit den Makros ueberhaupt, wenn logMessage beliebig viele Parameter kriegen kann?
-
Bauer123456 schrieb:
(Der 1. Wert ist ein enum). Funktioniert das mit den Makros ueberhaupt, wenn logMessage beliebig viele Parameter kriegen kann?
du musst einmal klammern:
LOG((a,b,c,d,e,f,g));
dann geht es. weil LOG dann nur einen Parameter bekommt, nämlich (a,b,c,d,e,f,g). Ist aber unschön. Was man manchmal macht ist einfach mehrerer Makros:
LOG_INT("foo", 3);
LOG_STR("foo", "bar");etc.