Sí, hay una diferencia. En C, una variable const
aún no se trata como una constante de compilación en tiempo real (oficialmente, no se permite una parte de un constant expression
), por lo que no está permitido. Sin embargo, tenga en cuenta que aunque C no requiere que el compilador lo permita, la norma otorga permiso para que una implementación acepte otras formas de expresiones constantes, por lo que es libre de aceptarlo si lo desea.
En C++, una variable const
se trata como una constante, por lo que está permitida.
Curiosamente, más o menos lo contrario es cierto cuando se utiliza un valor pasado como un parámetro de la función:
void f(int size) {
int array[size];
}
Este es permitido en C, pero no en C++. Esta es una matriz variably modified
; el mensaje de error que está recibiendo básicamente está tratando de decirle que estos solo están permitidos dentro de las funciones.
En C, ¿puede pasar el tamaño de una matriz a una función? ¡Aprendido! ¡Gracias! – Rich
@Rich: sí, pero solo si su compilador cumple con C99 (al menos a este respecto) - esto no estaba incluido en C89/90 (aunque era una extensión bastante común incluso con compiladores más antiguos). –