En C ++ intenté declarar una matriz global de algún tamaño. Recibí el error:
El conjunto de enlaces no es una constante entera antes del token ']'
Pero cuando declaró una matriz del mismo tipo en la main()
función, funciona bien.
¿Por qué hay un comportamiento diferente aquí?
int y=5;
int arr[y]; //When I comment this line it works fine
int main()
{
int x=5;
int arr2[x]; // This line doesn't show any error.
}
Editar: Muchos están sugiriendo que esta pregunta es un duplicado del error Obteniendo "el enlace de matriz no es una constante entera antes del token ']' . Pero esa pregunta no responde por qué hay un comportamiento diferente.
main
es "aceptado" por su compilador: está utilizando la extensión del compilador, que permite la compilación de VLA, incluso si no son compatibles con el estándar C ++.
y
y x
como const
? ¿Necesita modificar el valor de y
o x
? Esperemos que no, porque eso plantea muchas preguntas sobre cuán grande arr
y arr2
debería ser, especialmente con la respuesta al orden de inicialización. (Sugerencia: deberían ser constantes)
--std=c++17
(o --std=c++11
si es un compilador anterior), y la compilación fallará.
main
, no es legal, utiliza la extensión VLA.