Pour ne pas pourir le topic "programmation DS" de Isukthar, je crée un autre topic.
Je voulais réagir sur ce qu´a écrit Kufa sur les flexible array length, et tout ce dont tu as parlé.
Je viens de faire quelques tests, (je ne me servais jamais de ça), perso il y a quelque chose qui m´échappe :
Voila ce que j´ai testé
struct Foo{
int a;
int b[];
};
struct Foo foo0 = { 55, {6} };
int i1 = sizeof(foo0);
struct Foo foo1 = { 55, {6, 8, 10} };
int i2 = sizeof(foo1);
Alors Visual C++ 2005 me refuse le b[] en C et en C++ (peut etre pas encore C99 ?) sauf si j´active "langage extentions", a ce moment la, il ne bronche pas. par contre, il compile en C et C++.
Bon, tu vas me dire, Visual peut etre "permissif" si on lui demande. (je ne lance pas de débat visual VS gcc foireux)
Bref, finalement, j´arrive donc quand meme a y compiler.
Ma question, c´est que i1 et i2 me renvoient 4.
Donc finalement, il ne prend comem size de la structure que le int a. Et pourtant si je debug, je vois mon tableau, comme je l´ai rempli : un int, suivi d´un pointeur vers le tableau b.
Donc pourquoi ma sizeof me renvoie 4 ? Je m´attendais a 8 ! la taille de a et celle d´un pointeur vers un tableau. Pourquoi je n´ai que 4 ?
Sinon, mis a part ça, si je comprends bien, ce code est cencé marché en C et non en C++ ? ou l´inverse ?
Car pour moi, on a du code implicite : une allocation dynamique de b, et une destruction implicite aussi. C´est contraire a la philosophie C ou tout est explicite.
J´avais déja vu, sinon, des exemples genre :
void fonc(int n)
{
int tab[n];
}
qui finalement masquent une allocation dynamique en interne (et qui sont moyennement portables). Perso, je n´aime pas bien cela, car c´est trompeur : on y écrit comme un tableau statique, mais en interne, c´est un tableau dynamique...
Bref bref,
pour le moment, ma question, c´est : pourquoi ce sizeof me renvoie 4 ?