¿Es legal usar memset(…, 0, …) en una matriz de dobles?

¿Es legal usar memset(…, 0, …) en una matriz de dobles?


¿Es legal poner a cero la memoria de una matriz de dobles (usando memset(…, 0, …) ) o estructura que contiene dobles?


La pregunta implica dos cosas diferentes:



  1. Desde el punto de vista del estándar C: ¿Es este comportamiento indefinido de no? (En cualquier plataforma en particular, supongo, esto no puede ser un comportamiento indefinido, ya que solo depende de la representación en memoria de los números de punto flotante, eso es todo).



  2. Desde el punto de vista práctico: ¿Está bien en la plataforma Intel? (Independientemente de lo que diga el estándar).




Respuestas:


El Anexo F del estándar C99 dice:



E, inmediatamente después:



Por lo tanto, dado que IEC 60559 es básicamente IEEE 754-1985, y dado que especifica que 8 bytes cero significan 0,0 (como dijo @David Heffernan), significa que si encuentra __STDC_IEC_559__ definido, puede hacer una inicialización 0.0 con seguridad con memset .