¿Alguna razón para preferir memset/ZeroMemory a la inicialización de valores para estructuras WinAPI?

¿Alguna razón para preferir memset/ZeroMemory a la inicialización de valores para estructuras WinAPI?


En la programación de Win32 se utiliza un puñado de estructuras POD. Esas estructuras a menudo deben ponerse a cero antes de su uso.


Esto se puede hacer llamando a memset() /ZeroMemory()


STRUCT theStruct;
ZeroMemory( &theStruct, sizeof( theStruct ) );

o por valor de inicialización:


STRUCT theStruct = {};

Aunque las dos variantes anteriores no son equivalentes en general:



  • tratar el relleno de manera diferente

  • tratar las variables miembro que no sean POD de manera diferente


en el caso de las estructuras POD utilizadas en Win32, parecen equivalentes.


¿Hay algún caso en el que memset() /ZeroMemory() debe usarse en lugar de la inicialización de valores con estructuras Win32 POD?


Respuestas:


Siempre uso:


STRUCT theStruct = {}; // for C++, in C use {0}

Es más corto, estándar, por lo tanto, más elegante, y realmente no me importan las diferencias teóricas. Estamos hablando de código para un sistema operativo concreto aquí.


Otra ventaja es que también puede establecer inmediatamente el tamaño de la estructura en el primer miembro de esta manera:


STRUCT theStruct = {sizeof(STRUCT)}; 

Muchas estructuras de Win32 requieren que establezca el tamaño en un primer miembro.