Passage de la taille d'un tableau en argument

Passage de la taille d'un tableau en argument - C - Programmation

Marsh Posté le 26-08-2005 à 16:04:15    

hi
 
dites voilà jai un probleme
 
je passe par argument d'une fonction la taille dun tableau que je déclare au début de la fonction meme
 
ca compile avec Dev C++ mais avec Microsoft Visual C++ ca amrche pas
 
quelqu'un peut m'expliquer?
 
on a le droit de faire ça ou pas?
 
merci d'avance
 

Reply

Marsh Posté le 26-08-2005 à 16:04:15   

Reply

Marsh Posté le 26-08-2005 à 16:09:20    


 
Bien sûr !
 
Le temps de consulter ma boule de cristal...
http://www.leverseau.fr/boutique/images/8034.jpg
 
Hmm. Marche pas. Bon, ben poste ton code qui ne fonctionne pas, alors.  [:jagstang]

Reply

Marsh Posté le 26-08-2005 à 16:10:43    

bin les erruers de compilation sous MVC++ sont :  
expect constant expression
 
mon code il est tout simple
 
void f(int n)
{
 double arr[n];
 
 
 
}
 
sous dev c++ ca passe
 
on ma suggeré que ct peut etre que certaine version de C acceptait ce genre de choses (les + recentes probablement) et pas d'autres

Reply

Marsh Posté le 26-08-2005 à 16:13:19    

Normal, ça ne fonctionne qu'en C99 ce que tu fais, ta version de VC++ n'implémente peut-être pas cette fonctionnalité.
 
Solution :
 

Code :
  1. void f(int n)
  2. {
  3.    double *arr = malloc(n * sizeof *arr);
  4.    if ( arr == NULL )
  5.    {
  6.       /* gerer l'erreur */
  7.    }
  8.    else
  9.    {
  10.       /* sinon continuer le programme, arr est alloue */
  11.       /* et quand on a fini, on libere la memoire */
  12.       free(arr);
  13.    }
  14. }


Message édité par Elmoricq le 26-08-2005 à 16:24:34
Reply

Marsh Posté le 26-08-2005 à 16:15:25    

nan dsl ca marche pas
je voulais dire de mettre const int n


Message édité par Profil supprimé le 26-08-2005 à 16:17:31
Reply

Marsh Posté le 26-08-2005 à 16:16:28    


 
Dans le sujet, y a marqué "[C]" :D
 
Maintenant si c'est en C++, "new" n'est pas "meilleur", il est obligatoire.  
malloc() en C++, c'est une hérésie ;)

Reply

Marsh Posté le 26-08-2005 à 16:16:42    


 
Tu n'es pas assez vague, pourrais-tu être moins spécifique ?

Reply

Marsh Posté le 26-08-2005 à 16:18:06    


y met tjrs la meme erreur quoi

Reply

Marsh Posté le 26-08-2005 à 16:20:36    


 
Ben c'est normal, c'est défini dans la norme C99 cette fonctionnalité, et je ne connais pas de compilateur qui l'implémente en entier encore, la plupart en sont encore au C89  
[:klem3i1]  
 
Utilise la solution que je te propose, avec malloc().
 
 
 
 
Oops, c'est vendredi j'ai oublié le free()  [:jar jar]  
 
J'édite mon message :o


Message édité par Elmoricq le 26-08-2005 à 16:21:15
Reply

Marsh Posté le 26-08-2005 à 16:21:21    

en C ANSI et C++, la taille des tableaux est statique par définition (connue à la compilation). C99 permet une taille dynamique, mais c'est une technique généralement déconseillé en faveur de l'allocation dynamique

Reply

Marsh Posté le 26-08-2005 à 16:21:21   

Reply

Marsh Posté le 26-08-2005 à 18:02:19    

Taz a écrit :

en C ANSI et C++, la taille des tableaux est statique par définition (connue à la compilation). C99 permet une taille dynamique, mais c'est une technique généralement déconseillé en faveur de l'allocation dynamique


En plus, je ne connais pas d'implémentation conforme (gcc 4.x : VLA : 'broken')
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-08-2005 à 18:02:53    

Spoiler :


Use the alloca() luke ! [:cupra]


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 26-08-2005 à 18:07:48    

0x90 a écrit :

Spoiler :


Use the alloca() luke ! [:cupra]



Bah non. Pas standard et complètement obsolete.. Use malloc() / free().
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-08-2005 à 18:13:25    

Emmanuel Delahaye a écrit :

Bah non. Pas standard et complètement obsolete.. Use malloc() / free().


 
d'ou le combo [spoiler]/[:cupra] ;)
m'enfin ca reste une fonction _amusante_ à utiliser, avec ce petit piquant dans l'échine à chaque exécution... mmm...
 
 


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed