Básicamente, lo que quiero es algún tipo de versión generada en tiempo de compilación que esté asociada con la definición exacta de una estructura. Si la definición de la estructura cambia de alguna manera (campo agregado, movido, cambiado de nombre), quiero que esa versión también cambie.¿Generar ID de versión de la definición de estructura?
Dicha constante de versión sería útil al leer en una estructura previamente serializada, para asegurarse de que aún es compatible. La alternativa sería hacer un seguimiento manual de una constante especificada manualmente, que tiene efectos potencialmente confusos si incrementarla se olvida (deserializar produce basura), y también plantea la pregunta cuándo exactamente incrementarla (durante el desarrollo y las pruebas, o solo durante algún tipo de lanzamiento).
Esto podría lograrse mediante el uso de una herramienta externa para generar un hash sobre la definición de estructura, pero me pregunto si es posible con el compilador de C (y/o tal vez su preprocesador).
Esto es realmente una forma de introspección y entonces sospecho que esto no puede ser posible en absoluto en ANSI C, pero estaría contento con una solución que funciona con gcc y clang.
¿Alguna MS hace referencia a esto? – ouah
Agregó un ejemplo –
Gracias. Pensé simplemente en usar sizeof, pero eso por supuesto no protege contra los campos que se mueven u otras operaciones que resultan en cualquier tamaño visto anteriormente. Para la API de Windows, probablemente sea una buena idea restringir las modificaciones solo a las adiciones de campos, pero actualmente no quiero llegar tan lejos ... –