Matriz de comprimento variável (VLA) em compiladores C ++
Como já sabemos,VLA (padronizado emC99) não fazem parte do padrão em C ++.
Portanto, o código abaixo é"ilegal" noC ++:
void foo(int n) {
int vla[n];
for (int i = 0; i < n; ++i) {
vla[i] = i;
}
}
Apesar disso, o compilador (g ++ eclang ++) aceita o código como sintaxe válida, produzindo apenas umaAviso em caso-pedantic
sinalizador está ativado.
O ISO C ++ proíbe a matriz de comprimento variável 'vla' [-Wvla]
Minhas perguntas são:
Por que o compilador aceita essa declaração?
O compilador não pode simplesmente rejeitar uma matriz em que tamanho[is-no-know-at-compile-time]
?
Existe algum tipo de regra de sintaxe de compatibilidade a seguir?
Sobre o que o padrão diz?
Pelo código de montagem produzido, vejo o compilador gravando na pilha do loop, como uma matriz normal, mas não consigo encontrar nada sobre o comportamento padrão.