No utilice const
variables para las ¡esta! En el lenguaje C, una variable calificada const
es no una constante en el sentido de expresión constante, por lo que no se puede usar para inicializar una variable estática/global. Esto tiene importantes consecuencias prácticas; por ejemplo, lo siguiente no funciona:
static const double powers_of_pi[] = { 1, PI, PI*PI, PI*PI*PI, PI*PI*PI*PI, };
La solución apropiada es #define
. Probablemente sea mejor utilizar el sufijo l
para que tengan el tipo long double
, e incluir suficientes decimales que los valores serán correctos para los tipos long double
de hasta 128 bits. Entonces puede usarlos donde sea que se espere cualquier tipo de punto flotante; C los convertirá silenciosamente a una precisión menor según sea necesario.
+1: C const son basura. Por ejemplo, ni siquiera puede hacer esto: 'static const double pi = 3.1415926; static const double tau = 2 * pi; 'porque en C const los inicializadores siempre tienen que ser constantes de compilación, que pi no es. –
Gracias por su apoyo, inyectando cordura en este tema. Parece que todos los demás provienen de un fondo de C++ y piensan que lo que funciona en C++ debería funcionar en C ... :-( –
@Luther, no deberían llamarlos basura. Tienen su uso limitado, pero ciertamente no es el de alguien. que viene de un fondo C++ espera. 'const' nunca debería haber sido elegido como la palabra clave para lo que está parado,' unmutable' o algo así habría sido mucho más sensato, para ambos, C y C++. –