Dimension constante d'un tableau

Résolu
Utilisateur anonyme - 9 oct. 2011 à 14:45
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 10 oct. 2011 à 10:28
Bonjour à tous,

Je me pose une question suite à une affirmation de mon livre pour apprendre le C++ :
"La dimension d'un tableau ne peut être qu'une constante ou une expression constante entière."

Ainsi, c'est marqué que cela ne compile pas :
int nel;
cin >> nel;
int t[nel];

Pour faire cela il faut allouer de la mémoire dynamiquement avec l'opérateur new.


Or sous Code Blocks un tel code compile ET fonctionne très bien :

int main(){

int var;
cin >> var;
int t[var];
for(int i=0; i<var; i++){
t[i]=i*i;
cout << t[i];
}

return 0;
}

J'avoue ne pas comprendre pourquoi.

Merci d'avance de m'éclaircir sur ce point,

A plus

3 réponses

pop70 Messages postés 181 Date d'inscription mardi 6 avril 2010 Statut Membre Dernière intervention 7 janvier 2012 10
9 oct. 2011 à 18:26
Salut,

Cela marche... et ne marche pas, en fait tout dépend de la version du langage, c'était déjà le cas pour le C: la version C89 ne l'autorisait pas, alors que les versions plus récentes si.
Si Code::Block autorise ce code, ce ne sera peut-être pas le cas de tous les compilateurs (notamment les plus anciens).
Donc dans un souci "d'exportabilité", il est plus souhaitable d'allouer le tableau dynamiquement plutôt qu'avec des variables.

Voilà, j'espère avoir éclairci un peu la question ;)

C++dialement,

Pop70
3
Utilisateur anonyme
9 oct. 2011 à 19:39
Ta réponse était très claire, merci beaucoup

A bientôt
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
10 oct. 2011 à 10:28
J'en profite pour rajouter que si tu actives l'option "-pedantic", tu te prendras un magnifique warning.
Normalement, la question ne se pose pas, car en C++, il est rare d'utiliser ce genre de tableau. Il est préférable d'utiliser l'une des collections de la STL (std::vector, std::array, std::list, etc...)

Enfin, je t'invite à utiliser au moins les flags suivants: -W -Wall -Wabi -pedantic

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous