multiple déf de tableau (dans fct test)

Bonjour,

Il m'arrive souvent d'avoir à définir un tableau de multiples fois (avec une valeur "litérale"), notamment dans des fonctions de tests. Typiquement, ce tableau contient tout ou partie des données d'un cas de test qui est exécuté plusieurs fois sur des données différentes. Exemple fictif : une fonction somme et son test (ça utilise 2-3 outils externes):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
uint somme (uint * numbers, uint count) {
   if (count == 0) {
      printf ("*** tu rigoles ? ***\n") ;
      exit (EXIT_FAILURE) ;
   }
 
   uint i = 0 ;
   uint accu = numbers[0] ;
   for (i=1 ; i<count ; i ++) {
      accu += numbers[i] ;
   }
 
   return accu ;
}
 
void test_somme () {
   puts ("=== test somme ==================================================") ;
   uint * nums ;
   uint c ;       // count
 
   nums = (uint[]){3} ; c = 1 ;
   write_numbers (nums, c) ; printf (" --> %u\n", somme (nums, c)) ;
 
   nums = (uint[]){1,3,9} ; c = 3 ;
   write_numbers (nums, c) ; printf (" --> %u\n", somme (nums, c)) ;
 
   nums = (uint[]){} ; c = 0 ;
   write_numbers (nums, c) ; printf (" --> %u\n", somme (nums, c)) ;
 
   // .............
 
   end_test () ;
}
Alors, ma question est de comment bien écrire un tel tableau variable, à la fois sa déclaration et ses multiples définitions. Une fois écartée la syntaxe "taille fixe" uint sum [n] (en déclaration ou en définition), il reste (ditto) les syntaxes tableau variable [] et pointeur *. Alors la seule combinaison qui me semble marcher est celle que j'utilise la haut:
* pointeur '*' en déclaration
* tableau variable '[]' en définition

Mais je ne comprends pas du tout la logique du truc. A chaque fois que j'en ai besoin, il me faut chercher quelle est la bonne combinaison syntaxique.

Plus généralement, je ne comprends pas quand et pourquoi il faut utiliser une syntaxe pointeur ou une syntaxe tableau. Parfois, les deux marchent, il me semble. ???

Enfin, j'utilise ici une définition de tableau variable avec un préfixe de typage (uint[]) dont il me semble que c'est un ajout de C99. Correct ? Si oui, comment fai(sai)t-on sans cela ? (Ne me dites pas que les éléments devaient être ajoutés un à un ou je deviens fou. Et de toute façon, comment prédimensionner le tableau sans le redéfinir avant de le remplir ?).