Palabras clave const y expresiones constantes en C99 y C11

¿Podemos realmente usar la palabra clave const en C99 y C11 para construir expresiones constantes como esta? ¿Qué estándar dice al respecto?

const int n = 5; int main() { int arr[n]; } 

En C89 / C90 no podemos.

No. const en C nunca significa constante pero significa solo listo.

Esto es lo mismo para C90 / C99 / C11.

Tenga en cuenta que en su ejemplo, está utilizando una matriz de longitud variable. Los VLA se han introducido en C99 y el tamaño de un VLA no necesita ser una expresión constante, pero aún n no es una expresión constante.

No, const no hace una constante como lo hace en C ++.

Por otro lado, C99 agregó matrices de longitud variable (VLA), por lo que para auto clase de almacenamiento auto , el tamaño no necesita ser una constante. Esto te permite hacer cosas como:

 int f(int n) { int array[n]; // ... } 

Por lo tanto, no puede hacer exactamente lo que está pidiendo, pero puede hacer algo que sea lo suficientemente parecido al equivalente para muchas (quizás la mayoría) de las circunstancias.