Si la donnée est une variable statique ou globale, elle est remplie de zéros par défaut, il suffit donc de la déclarer myStruct _m;
Si les données sont une variable locale ou une zone allouée au tas, effacez-les avec memset
comme :
memset(&m, 0, sizeof(myStruct));
Les compilateurs actuels (par exemple les versions récentes de gcc
) l'optimisent très bien dans la pratique. Cela ne fonctionne que si toutes les valeurs nulles (y compris les pointeurs nuls et les zéros en virgule flottante) sont représentées par tous les bits nuls, ce qui est vrai sur toutes les plates-formes que je connais (mais la fonction C permet des implémentations où cela est faux ; je ne connais aucune implémentation de ce type).
Vous pourriez peut-être coder myStruct m = {};
ou myStruct m = {0};
(même si le premier membre de myStruct
n'est pas un scalaire).
J'ai le sentiment que l'utilisation de memset
pour les structures locales est la meilleure, et elle traduit mieux le fait que quelque chose doit être fait au moment de l'exécution (alors qu'habituellement, les données globales et statiques peuvent être considérées comme initialisées au moment de la compilation, sans aucun coût au moment de l'exécution).
2 votes
Remarque : si la structure comporte des octets de remplissage (en raison de l'alignement), aucune de ces méthodes ne garantit qu'ils sont initialisés. Cela peut être important lorsque l'on écrit la structure sur une mémoire externe, un réseau ou que l'on compare avec la fonction
memcmp
. Dans ce cas, il convient d'utilisermemset
.