Bon alors, j'ai un exemple de programme. Mais je me pose la question de
sa validité sachant que ce que vous allez voir. C'est correct dans
certain langage comme Ada.
int main()
{
int n = 10;
{
int tab[n]; // <= Grande question
int valeur_suivante = 0;
for (int i=0 ; i<n ; i++)
{
tab[i] = i;
std::cout << i << " : " << tab[i] << std::endl;
}
std::cout << "Adresse de tab : " << (long)tab << std::endl;
std::cout << "Adresse de valeur suivante : " << (long)&valeur_suivante << std::endl;
std::cout << "Valeur de valeur suivante : " << valeur_suivante << std::endl;
}
system("PAUSE");
return 0;
}
Lorsque la fonction est appelée "n" contient une valeur fixe. C'est
aussi à ce moment la, que le tableau "tab" est créé. La différence en
Ada, c'est qu'il y a un champ spécial de déclaration de variables (type
pascal) donc il n'y a pas d'ambiguité sur la taille du tableau, meme si
la taille est un paramètre de la fonction. Si bien que le code dessus
serait bon.
Alors quelqu'un pourrait il me dire si le programme au dessus est
définitivement incorrect, ou alors il y a des cas où c'est correct.
Dans
le cas ou c'est incorrect, pourquoi est ce que le compilo ne donne pas
de message d'erreur ? Et si la preuve pouvait etre autre chose qu'une
opinion personnelle, ca serait bien :)
merci.