Non utilizzare const
variabili per Questo! Nel linguaggio C, una variabile qualificata const
è non una costante nel senso dell'espressione costante, quindi non può essere utilizzata nell'inizializzazione di una variabile statica/globale. Ciò ha importanti conseguenze pratiche; per esempio, il seguente non funziona:
static const double powers_of_pi[] = { 1, PI, PI*PI, PI*PI*PI, PI*PI*PI*PI, };
La soluzione corretta è #define
. Probabilmente è meglio usare il suffisso l
in modo che abbiano il tipo long double
e includere un numero sufficiente di posizioni decimali che i valori siano corretti per i tipi long double
fino a 128 bit. Quindi puoi usarli ovunque sia previsto un tipo a virgola mobile; C li convertirà silenziosamente in una precisione inferiore se necessario.
fonte
2010-08-07 21:13:14
+1: C const sono spazzatura. Ad esempio non puoi nemmeno farlo: 'static const double pi = 3.1415926; statico const double tau = 2 * pi; 'perché negli inizializzatori C const devono sempre essere presenti costanti di tempo, che pi non è. –
Grazie per il supporto che ha iniettato un po 'di sanità mentale in questo argomento. Sembra che tutti gli altri provengano da uno sfondo C++ e pensa che ciò che funziona in C++ dovrebbe funzionare in C ... :-( –
@Luther, non dovrebbero chiamarli spazzatura. Hanno un uso limitato, ma non certo quello di qualcuno quello che viene da uno sfondo in C++ si aspetta. 'const' non dovrebbe mai essere stato scelto come parola chiave per ciò che sta,' immutabile' o qualcosa del genere sarebbe stato molto più sano, per entrambi, C e C++. –