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