Fondamentalmente, quello che voglio è una sorta di versione generata in fase di compilazione che è associata con la definizione esatta di una struttura. Se la definizione della struttura cambia in qualsiasi modo (campo aggiunto, spostato, , forse rinominato), voglio che anche quella versione cambi.Genera ID versione della definizione struct?
Tale costante di versione sarebbe utile quando si legge in una struttura precedentemente serializzata, per assicurarsi che sia ancora compatibile. L'alternativa sarebbe tenere traccia manualmente di una costante specificata manualmente, che ha effetti potenzialmente confusi se l'incremento viene dimenticato (deserializzazione produce spazzatura), e solleva anche la domanda quando esatto per incrementarlo (durante lo sviluppo e il test, o solo durante qualche tipo di rilascio).
Questo potrebbe essere ottenuto utilizzando uno strumento esterno per generare un hash sulla definizione della struct, ma mi chiedo se sia possibile con il compilatore C (e/o forse il suo preprocessore) stesso.
Questa è in realtà una forma di introspezione e quindi sospetto che ciò potrebbe non essere possibile in ANSI C, ma sarei felice con una soluzione che funzioni con gcc e clang.
Qualsiasi riferimento MS a questo? – ouah
Aggiunto un esempio –
Grazie. Ho pensato solo a usare sizeof, ma ovviamente non mi preoccupo dei campi che vengono spostati o di altre operazioni che risultano in una dimensione vista in precedenza. Per l'API di Windows, è probabilmente una buona idea limitare le modifiche solo alle aggiunte di campi, ma attualmente non voglio arrivare a tanto ... –