Hallo Martin,
oder b) wie initialisiere ich alle Pointer default mit NULL. (Angenommen, das struct hat n Elemente, möchte ich ja nicht n Elemente auf NULL setzen)
Easy: memset(&var, 0, sizeof(var));
Weitere Alternative für den Stack:
foo_t my_foo = { NULL };
bzw. für kompliziertere Strukturen:
typedef struct bar_s {
int a;
int b;
double c;
void *d;
} bar_t;
bar_t my_bar = { 0, 0, 0.0, NULL };
bzw. auch erlaubt ist (aber wird von verschiedenen Compilern zurecht mit einer Warnung quittiert):
bar_t my_bar = { 0 };
(Wenn man nur { 0 } schreibt heißt es, alle Felder werden mit 0 initialisiert.)
Da letzteres schlechter Stil ist, ersteres aber von der Strukturdefinition abhängt, empfiehlt es sich, ein Makro direkt neben der Struktur zu definieren:
typedef struct bar_s {
int a;
int b;
double c;
void *d;
} bar_t;
#define BAR_T_INITIALIZER { 0, 0, 0.0, NULL }
Und dann:
bar_t my_bar = BAR_T_INITIALIZER;
Je nach Compiler kann das schneller als memset() sein, muss aber nicht, da in neueren Compilern memset() oftmals eine eingebaute interne Funktion ist, die durch effizienten Assembler-Code an genau der Stelle ersetzt wird. Ist daher wohl Geschmackssache, was man nimmt.
Viele Grüße,
Christian
Mein "Weblog" [RSS]
Using XSLT to create JSON output (Saxon-B 9.0 for Java)
»I don't believe you can call yourself a web developer until you've built an app that uses hyperlinks for deletion and have all your data deleted by a search bot.«
-- Kommentar bei TDWTF