Utilisateur anonyme
-
9 oct. 2011 à 14:45
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 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];
}
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 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 ;)
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023123 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/portfoliohttp://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question