È legale utilizzare memset(…, 0, …) su un array di double?

È legale utilizzare memset(…, 0, …) su un array di double?


È legale azzerare la memoria di un array di double (usando memset(…, 0, …) ) o struct contenente doppi?


La domanda implica due cose diverse:



  1. Dal punto di vista dello standard C: È questo comportamento indefinito di no? (Su qualsiasi piattaforma particolare, presumo, questo non può essere un comportamento indefinito, poiché dipende solo dalla rappresentazione in memoria dei numeri in virgola mobile, tutto qui.)



  2. Dal punto di vista pratico: Va bene su piattaforma Intel? (Indipendentemente da ciò che dice lo standard.)




Risposte:


L'allegato F dello standard C99 dice:



E, subito dopo:



Quindi, poiché IEC 60559 è fondamentalmente IEEE 754-1985, e poiché questo specifica che 8 zero byte significano 0,0 (come ha detto @David Heffernan), significa che se trovi __STDC_IEC_559__ definito, puoi tranquillamente eseguire un'inizializzazione 0.0 con memset .