od 21 wieku C książce:Inicjowanie statyczna zmienna o wartości nonconstant
zmiennych statycznych, nawet wewnątrz funkcji, są inicjowane po uruchomieniu programu, przed głównym, więc nie można zainicjować im o wartości nietrwałej.
//this fails: can't call gsl_vector_alloc() before main() starts static gsl_vector *scratch = gsl_vector_alloc(20);
Jest to kłopot, ale łatwo rozwiązać za pomocą makra, aby rozpocząć od zera i przeznaczyć na pierwszym użyciu:
#define Staticdef(type, var, initialization) \ static type var = 0; \ if (!(var)) var = (initialization); //usage: Staticdef(gsl_vector*, scratch, gsl_vector_alloc(20));
Nie rozumiem co za różnica makro wykonane. Czy nie robi dokładnie to samo po wstępnym przetwarzaniu?
Niezbyt bezpieczne zalecenie tej książki, ale szybkie i brudne niebezpieczne Hack. – alk