disculpe si esta pregunta parece ingenua, pero no he podido encontrar una respuesta clara en ninguna parte. Debo definir una constante en términos de constantes previamente definidas, como
#define CONST_A 2 #define CONST_B 3 #define CONST_C CONST_A*CONST_B
Los valores reales de CONST_A
y CONST_B
se alimentan como defineflags a gcc, por lo que no puedo escribir #define CONST_C 6
.
Si entiendo correctamente, esto le indicará al preprocesador que reemplace cualquier apariencia de CONST_C
por 2*3
y no 6
, ¿verdad? Estoy principalmente preocupado por el rendimiento, así que preferiría este último. Supongo que esto se podría hacer usando static const
lugar del preprocesador #define
. ¿Es ésta la mejor opción?
¡Gracias por adelantado!
No se preocupe por el rendimiento de expresiones constantes como 2 * 3
en C. Los comstackdores de C han podido eliminar tales expresiones al evaluarlas en tiempo de comstackción durante al menos 20 años.
static const
puede preferirse por otras razones, como la seguridad de tipos o no tener que preocuparse por la prioridad (piense qué sucede si CONST_A
se define como 2+2
), pero no por razones de rendimiento.
C dice que las expresiones constantes pueden evaluarse en tiempo de comstackción y cualquier comstackdor decente de hoy evaluará expresiones constantes en tiempo de comstackción. Esta operación del comstackdor se conoce como plegamiento constante .
(C99, 6.6p2) “Una expresión constante puede evaluarse durante la traducción en lugar del tiempo de ejecución, y en consecuencia puede usarse en cualquier lugar en que pueda haber una constante”.