Definiendo una constante en términos de otras constantes.

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”.