Dimension constante d'un tableau

Résolu
Signaler
-
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
-
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

Messages postés
181
Date d'inscription
mardi 6 avril 2010
Statut
Membre
Dernière intervention
7 janvier 2012
10
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

Ta réponse était très claire, merci beaucoup

A bientôt
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
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