C:\Documents and Settings\Paul>tigcc -S -O2 z.c z.c:1: error: variable-size type declared outside of any functionMauvaise foi! Et puis en déclarant mon tableau comme global (cf post de départ) il n'y aurait aucun problème. Le but ici est de définir le tableau dans la fonction main.
Sinon on peut toujours jongler avec des #define et #undef, je pense que cela fonctionne.#define mat(x,y) ((nom_table)[x+dimX*y])
void ma_fonction(TABLE *tableau)
{
#undef nom_table
Note: Ce code est très certainement ridicule et je suis quasiment sûr qu'on peut faire mieux mais c'est juste pour "exprimer ma pensée"Thibaut B :
int y[] n'est pas une déclaration de tableau de taille indéfinie ?
Ce qu'on veut passer, c'est le tableau et sa dimension, en un seul paramètre. La dimension peut ensuite être obtenue par un sizeof.

Kevin Kofler
: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'imaginePas si la structure est locale.
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.
Pollux
: En plus, la spécialisation de templates n'est pas possible... Je pense que ce que tu veux dire par "spécialisation" est en réalité "instantiation", non? (j'entends par spécialisation : vector<typename T> = blablabla; vector<bool> = gnagnagna, donc vector<bool> spécialisation de vector<T>).
Mais la spécialisation est possible en GNU C: http://tigcc.ticalc.org/doc/gnuexts.html#SEC104___builtin_types_compatible_p.
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.
Mhu? Au contraire, 'const int xdim' ne peut pas être mis dans le type. #define mavar_XDIM doit être utilisé à chaque fois qu'on utilise un nouveau nom de variable (et attention aux conflits entre fonctions si on oublie les #undef)
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.C'est à dire?
Mais la spécialisation est possible en GNU C
Ben non, on déclare sa variable en int (*p)[123] et on n'a pas besoin de définir quoi que ce soit. Si on veut changer la taille, on la change dans la déclaration de type.
> C'est à dire? Que ce n'est pas encore implémenté, je ne vois pas comment détailler plus.

(ou alors, ne pas systématiquement mettre à jour sur last.php, et ne le faire que lorsqu'on regarde la dernière page du topic, mais c'est plus compliqué à implémenter je pense).
Et pkoi un ingénieur C est mieux payé qu'un ingénieur C++ ? 
Mauvaise foi! Et puis en déclarant mon tableau comme global (cf post de départ) il n'y aurait aucun problème. Le but ici est de définir le tableau dans la fonction main.
Je dis juste que le C oblige à tout mettre dans le namespace du préprocesseur, ce qui est très gore et empêche d'associer à un certain type de données un attribut correspondant à ce type (puisqu'on ne peut que l'associer à une variable).Sinon on peut toujours jongler avec des #define et #undef, je pense que cela fonctionne

le C++ c'est simple, et le C c'est complique
(sinon tu risques de faire des routines lentes
)

Si utiliser un langage qui a une syntaxe merdique ça veut dire être un Déus, alors je me remets de ce pas au Pascal ou au CAML 
.
In this instance, ~y() is a protected abstract virtual base pure virtual private destructor of z

Brunni> si tu regardes encore ce topic, soit le type de retour de alloue, tu le mets en bool, soit tu te crées des constantes genre #define MEM_OK 1 ce sera plus propreBah pourquoi pas...
Il faut distinguer ceux qui font du C++ et ceux qui font des MFCQu'est-ce qu'elles ont les MFC? J'ai essayé à l'époque mais j'ai tout lancé loin. Maintenant je fais du truc bizarre peut-être encore plus compliqué où tu fais des trucs du style:
)
Tu rigoles? Je dirais que quand tu maîtrises le C++ alors normalement tu devrais aussi maîtriser le C (sinon tu risques de faire des routines lentes )Le C++ est plus lent que le C? Bah je suis encore assez étonné de la rapidité du C sur ordi. Mais les contrôles windows... c'est pas trop ça!
Et la grosse M pour mettre un texte dans un RichTextBox avec EM_STREAMIN et le callback de la mort... Et pourtant ça a pas l'air si lent que ça y paraît (quand je pense ce que c'était en VB... simple mais LENT)La documentation est un aspect primordial à considérer lorsqu'on veut utiliser une bibliothèque graphique riche en fonctionnalités. Celle de Visual, MSDN semble pléthorique, tient sur 10 CDROM. On y trouve des articles pour faire toutes sorte de choses. Cependant, elle laisse l'impression que ce qui est documenté provient d'une mauvaise architecture. La navigation à l'intérieur est de piètre qualité : impossible d'accéder facilement depuis une classe a ses classes mères ou filles, présentations des méthodes sans la signature, accès difficiles aux méthodes héritées, etc. Par ailleurs, en recherchant de l'aide sur un mot-clé, on tombe sur l'aide de tous les langages sur ce mot-clé: Java, Visual Basic, C++, InterDev, ...

Sasume :
Ah ? Curieux, pourtant c'est du C ANSI

spectras
: Aux dernières nouvelles, ben t'avais que la documentation VB, et si tu veux y accéder en C++, c'est freestyle.
Cf. la source du Tokens89 Command-Line Converter (http://members.chello.at/gerhard.kofler/kevin/francais/pcprogs/), qui charge un OCX VB en C (MinGW GCC). Mais c'est absolument illisible.
On voit que c'est du M$.
RedSilk
:Sasume :
Ah ? Curieux, pourtant c'est du C ANSI
Encore faut-il la switch -ansi (qui n'est pas mise par défaut quand on utilise l'IDE).
Le C ANSI sert plus à nous interdire les comments // qu'à autre chose.
Pour moi, le GNU C est une norme suffisante: pas chiante sur
des détails (//), permettant quelques *abus* qu'en fait tout le monde fait (les long long, utilisés aussi dans Visual C++).
Bon, si on voulait être Posix, là faudrait mettre -ansi.