Dal 21 ° secolo C libro:inizializzazione variabile statica con un valore non costante
variabili statiche, anche quelli all'interno di una funzione, vengono inizializzati all'avvio del programma, prima principale, quindi non è possibile inizializzare loro con un valore non costante.
//this fails: can't call gsl_vector_alloc() before main() starts static gsl_vector *scratch = gsl_vector_alloc(20);
Questo è un fastidio, ma facilmente risolto con una macro per iniziare a zero e allocare al primo utilizzo:
#define Staticdef(type, var, initialization) \ static type var = 0; \ if (!(var)) var = (initialization); //usage: Staticdef(gsl_vector*, scratch, gsl_vector_alloc(20));
Non capisco che differenza della macro fatto. Non fa esattamente la stessa cosa dopo la pre-elaborazione?
Non una raccomandazione molto sicura da questo libro, ma più di un rapido e sporco trucco pericoloso. – alk