[linux-l] Re: Arrays in C

Steffen Dettmer steffen at dett.de
Mo Nov 14 23:41:06 CET 2005


* Rocco Rutte wrote on Thu, Nov 10, 2005 at 11:01 +0000:
> >>#define DEBUG(fmt, args...) \
> >>   fprintf(stderr, "%s: " fmt "\n", __FUNCTION__, ##args)
> 
> >geht aber nicht, wenn ich schreibe:
> 
> >/* akademisch beklopptes Beispiel ich weiss */
> >snprintf(fmt, "At %d (%%s)");
> >DEBUG(fmt, "Hier"); 
> 
> >daher hier vielleicht lieber va_list, machen wir in der Firma jedenfalls
> >so (format string neu erzeugen), glaub ich.
> 
> oder einfach:
> 
>   #define DEBUG(X) do { \
>     fprintf (stderr, "%s: ", __FUNCTION__); \
>     /*fprintf X; */ \
     fprintf (stderr, X); \
>     fprintf (stderr, "\n");
>   } while (0);

Warum do {} while? {} block ist hier doch nichtmal notwendig, oder?

DEBUG("%d", 15) gibt einen Fehler - so ein Makro kann dann aber doch gar
keine Format-Strings mehr?!

> oder besser:
> 
>   #ifdef __GNUC__
>     #define DEBUG(X) do { \
>       fprintf (stderr, "%s:%d: ", __FUNCTION__, __LINE__); \

lieber "%s %s:%d: ", __FUNCTION__, __FILE__, __LINE__
oder sowas, __FUNCTION__ und __FILE__ müssen ja nicht eindeutig sein
(ich sag nur "static void module_init_once(void);" :)).

oki,

Steffen

-- 
Dieses Schreiben wurde maschinell erstellt,
es trägt daher weder Unterschrift noch Siegel.



Mehr Informationen über die Mailingliste linux-l