Come posso garantire che ciascun campo delle mie strutture sia inizializzato in GCC quando si utilizzano gli inizializzatori designati? (Sono particolarmente interessato a puntatori a funzione.) (Sto usando C non C++.)Come assicurarsi che le strutture siano completamente inizializzate (per nome) in GCC?
Ecco un esempio:
typedef struct {
int a;
int b;
} foo_t;
typedef struct {
void (*Start)(void);
void (*Stop)(void);
} bar_t;
foo_t fooo = {
5
};
foo_t food = {
.b=4
};
bar_t baro = {
NULL
};
bar_t bard = {
.Start = NULL
};
-Wmissing-field-inizializzatori non aiuta affatto. Funziona solo su GCC (mingw 4.7.3, 4.8.1), e clang funziona solo marginalmente meglio (nessun avviso per cibo e bardo).
Sono sicuro che c'è un motivo per non produrre avvisi per l'inizializzatore designato (anche quando li chiedo esplicitamente) ma li voglio/ne ho bisogno. Non voglio inizializzare le strutture in base all'ordine/posizione perché è più incline agli errori (ad esempio, lo scambio tra Start e Stop non darà nemmeno alcun avvertimento). E né gcc né clang daranno alcun avvertimento sul fatto che non sono riuscito a inizializzare esplicitamente un campo (durante l'inizializzazione per nome). Inoltre non voglio sporcare il mio codice con if (x.y == NULL) linee per molteplici ragioni, una delle quali è che voglio avvisi in fase di compilazione e non errori di runtime.
Almeno stecca mi darà avvertimenti su tutti e 4 i casi, ma purtroppo non è possibile utilizzare stecca tutto il tempo (si soffoca sulla parte del codice (non riesce ad analizzare alcuni C99, estensioni GCC)).
Nota: se sto utilizzando una funzione reale anziché NULL, GCC mostrerà anche un avviso per baro (ma non bardo).
Ho cercato google e stack overflow ma ho trovato solo domande correlate e non ho trovato risposta per questo problema specifico. La migliore corrispondenza che ho trovato è 'Assicurati che tutti gli elementi di una struttura siano inizializzati' Ensure that all elements in a structure are initialized Che chiede più o meno la stessa domanda, ma non ha una risposta soddisfacente.
C'è un modo migliore per affrontare questo che non ho menzionato? (Forse altro strumento di analisi del codice? Preferibilmente qualcosa (gratuito) che può essere integrato in Eclipse o Visual Studio ...)
C'è una risposta alla domanda che hai collegato che suggerisce la stecca. – orlp