está errado. No entanto, mas não dá "erro de compilação", isto é, o programador não é avisado que está a escrever para além dos limites da array. Isto pode dar origem a erros (ou melhor dizendo, "bugs") muito complicados de detectar (comportamentos completamente inesperados e incompreensíveis). Aqui é facilmente visível, mas se em vez de:
(...)
Serial.println(aux[201]);
(...)
estiver a fazer:
(...)
Serial.println(aux[i]);
(...)
onde o i por algum motivo foi para além de 200, dependendo do programa, pode ser muito difícil de encontrar. Deve ser feito o possível para não deixar isto acontecer.
Devia, mas eu não percebo muito de compiladores, mas penso que seria uma coisa ou muito difícil ou praticamente impossível de fazer. Por outro lado não sei muito bem como, nem porquê, mas é uma funcionalidade que até pode ser útil.
No entanto, em C, pode sempre fazer-se isso (aceder a uma posição do array, que está fora dele) usando ponteiros (não vou colocar nenhum exemplo para não complicar, mas pode ser perfeitamente feito). Conclusão: É preciso ter muito cuidado com isso, como disse anteriormente. Como pode ser ultrapassado, por exemplo usando defines:
#define MAX_AUX 200
unsigned int aux[MAX_AUX]; // Noutra parte do código está definida a variável e o define do tamanho.
(...)
// Onde se quer fazer uma coisa destas é usado o define que serviu para criar a array
for(int i=0; i<MAX_AUX; i++){
// Uma coisa a ter em atenção é NUNCA usar o '=' na condição de paragem do ciclo
aux[i] = i;
Serial.println(aux[i]);
}