Sto convertendo un codice che in precedenza scriveva le strutture direttamente nella memoria, per usare la serializzazione. Questo perché è piuttosto fastidioso avere pile di codice per decomprimere le strutture che sono state disposte in modo diverso nelle vecchie versioni del codice che sono state aggiornate.
In questa fase sto scrivendo a mano il codice di serializzazione, non sto cercando la serializzazione automatica.
Pseudocodice:
struct S
{
int x;
char ch;
short d;
struct { char a,b,c; } t;
};
void serialize_S(struct S const *s); // ignore details about serialization buffer for now
Supponiamo di aver scritto serialize_S
correttamente. Il problema che mi preoccupa è che qualcuno possa aggiungere un campo a struct S
senza aggiornare la funzione di serializzazione (e senza aggiornare alcuna suite di test). Potremmo pensare che il nuovo campo venga serializzato quando non lo è.
La mia domanda è: c'è qualcosa che posso fare per generare un errore di compilazione se un campo esiste nella struttura ma non è menzionato nella funzione di serializzazione?
Se necessario, la soluzione potrebbe richiedere tag aggiuntivi o qualcosa nella definizione di struct: sono pronto a credere che se le persone stanno modificando la definizione della struct e vedono qualcosa come una macro SERIALIZE_ME
alla fine di ogni campo, Mi renderò conto di aggiungerlo anche agli altri campi (o almeno, vedrei questa cosa guardando le differenze sulla revisione del codice).