Pollux
:
z.c:1: error: variable-size type declared outside of any function
Ben oui, il faut le mettre dans une fonction, évidemment...

Tu t'attends que le compilateur lit dans tes pensées pour savoir combien de mémoire allouer dans l'exécutable ou la section BSS si la taille n'est pas constante? Et si la taille
est constante, alors utilise
#define, pas
const.
Et idem si tu le déclares dans une structure j'imagine 
Pas si la structure est locale.
Quant au ##, regarde les sources de ld-tigcc, il y en a pas mal (pour faire des templates en C).
Ne t'inquiète pas, je sais ce que c'est 
C'est surtout à Thibaut que je m'adressais là.
Ca m'est arrivé assez souvent d'en utiliser, mais c'est vraiment pas terrible : si tu mets des fonctions dedans, c'est complètement indébuggable.
Justement, dans
ld-tigcc, il y a des fonctions entières codées avec des
## (suivies d'une ligne pour chaque spécialisation (pour reprendre le langage des templates, parce que c'est ce que c'est en réalité)).
Et pour l'exemple qui nous intéresse, ce n'est pas du tout aussi flexible que 'const int xdim' puisqu'on est obligé de le mettre dans une variable donnée et de déclarer à la main, pour tous les noms de variables possibles, la largeur du tableau...
Voilà pourquoi je conseille toujours la syntaxe C99 qui met ça là où ça a sa place: dans la déclaration du type.
D'ailleurs, le C99 prévoit aussi le passage de tableaux à une fonction sans avoir à préciser manuellement la taille, avec la syntaxe
int y[*]. Mais
GCC n'implémente pas encore ça.
