¿Se puede usar una variable const para declarar el tamaño de una matriz en C?

¿Por qué el siguiente código arroja un error?

const int a = 5;
int b[a]={1,2,3,4,5};

Y también cuando intenté compilar el código anterior sin la palabra clave "const", obtuve el mismo error:

int a = 5; 
int b[a]={1,2,3,4,5};

¿por que es esto entonces? ¿Cuál es el error que estoy haciendo aquí?

Y también otra pregunta: cuándo se reemplazan las constantes con sus valores reales en un código, es decir, si declaro una variable, por ejemplo: const int x = 5; Sé que no se asigna memoria en la RAM para la variable x, pero el área variable constante en la ROM contiene el valor 5 y que x simplemente se reemplaza por el valor 5 en todas partes aparece x en el código. Pero, ¿cuándo sucede esto? ¿Tiempo de compilación? Tiempo de arranque? ¿Tiempo de preprocesamiento?

PD: estoy hablando de Embedded C (ejecutándose en un Microcontrolador, etc.), no de C ejecutándose en mi escritorio. Por lo tanto, el sistema integrado está obligado a tener una ROM (Flash, EEPROM ...). ¿Qué pasaría entonces?

Respuestas a la pregunta(5)

Su respuesta a la pregunta