Las constantes definidas en macro se reemplazan por el preprocesador. Las 'variables' constantes se administran como las variables regulares.
Por ejemplo, el siguiente código:
#define A 8
int b = A + 10;
aparecería al compilador real,
int b = 8 + 10;
Sin embargo, este código:
const int A = 8;
int b = A + 10;
aparecería como:
const int A = 8;
int b = A + 10;
:)
En la práctica, la cosa principal que cambia es alcance: las variables constantes obedecen a las mismas reglas de alcance como variables estándar en C, lo que significa que se pueden restringir, o posiblemente redefinidas, dentro de un bloque específico, sin se está filtrando - es similar a la situación de variables locales vs. globales.
'no debe haber diferencia de rendimiento entre los dos' - Gracias por dejarlo tan claro.Momentos antes de leer en un libro miserable que tengo que dice que este último es más lento que el uso de la macro. –
Pero el uso de macros a veces puede aumentar el tamaño del archivo objeto. Supongamos que tiene una cadena muy grande almacenada en una macro, el preprocesador reemplazará toda la ocurrencia de esta cadena por su valor antes de la compilación, lo que resulta en un archivo de objeto comparativamente más grande. – shashwat