Ist es legal, memset(…, 0, …) für ein Array von Doubles zu verwenden?

Ist es legal, memset(…, 0, …) für ein Array von Doubles zu verwenden?


Ist es legal, den Speicher eines Arrays von Doubles zu nullen (mit memset(…, 0, …) ) oder eine Struktur, die Doubles enthält?


Die Frage impliziert zwei verschiedene Dinge:



  1. Aus Sicht des C-Standards: Ist dieses undefinierte Verhalten nicht? (Auf einer bestimmten Plattform, nehme ich an, kann dies kein undefiniertes Verhalten sein, da es nur von der In-Memory-Darstellung von Gleitkommazahlen abhängt – das ist alles.)



  2. Aus praktischer Sicht: Ist es auf der Intel-Plattform in Ordnung? (Unabhängig davon, was der Standard sagt.)




Antworten:


Anhang F des C99-Standards lautet:



Und unmittelbar danach:



Da also IEC 60559 im Grunde genommen IEEE 754-1985 ist, und da dies spezifiziert, dass 8 Nullbytes 0,0 bedeuten (wie @David Heffernan sagte), bedeutet dies, dass wenn Sie __STDC_IEC_559__ finden definiert, können Sie sicher eine 0.0-Initialisierung mit memset durchführen .