C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

struct declaration

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
pascal
Guest





PostPosted: Mon Apr 04, 2005 12:09 pm    Post subject: struct declaration Reply with quote



Bonjour,

Pourquoi cette exemple compile sans erreur :

struct X
{
int valX ;
struct X *x;
struct X *y;
};

alors que :

struct X
{
int valX ;
struct X x;
struct X y;
};

non,ce qui est plutot logique.
Dans le 1er cas comment le compilateur peut déclarer un pointeur de type
X alors que le bloc de déclaration du type X n'est pas encore?
Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Apr 04, 2005 3:12 pm    Post subject: Re: struct declaration Reply with quote



pascal wrote:

Quote:
Pourquoi cette exemple compile sans erreur :

struct X
{
int valX ;
struct X *x;
struct X *y;
};

Parce que c'est légal. Ceci dit, tout en étant légal en C++,
ce n'est pas très idiomatique ; ça ressemble plutôt du C. Mais
dans les deux cas (C ou C++), après avoir vu « struct X », le
compilateur sait qu'il y a un type qui s'appelle X, et que c'est
une classe (ou une structure, dans le cas de C).

Quote:
alors que :

struct X
{
int valX ;
struct X x;
struct X y;
};

non,ce qui est plutot logique.

Comme tu dis. Une classe X qui contient une instance de la
classe X (qui lui contient une instance de la classe X, ad
infinitum). Il va falloir pas mal de mémoire.

Quote:
Dans le 1er cas comment le compilateur peut déclarer un
pointeur de type X alors que le bloc de déclaration du type X
n'est pas encore?

Parce que quand il crée une classe, dans un premier temps, tout
ce qu'il faut au compilateur, c'est la taille de chaque élément,
non les détails sur comment le contruire, ou les noms des
champs. Or, la taille d'un pointeur vers une classe est toujours
la même, quelque soit la classe. Donc, pas de problème d'en
déclarer un pointeur vers une classe dont on ne connaît pas
encore les détails. Tandis que pour une instance d'une classe,
il faut bien en connaître la taille de la classe même, ce qui
veut dire avoir vu tous ses éléments.

En fait, en langage de la norme, on parle des types inachevés --
dès que le compilateur voit « struct X » ou « class X », il sait
que X est une classe, et il le considère comme un type connu
mais inachevés. On peut en faire certaines choses, mais non
d'autres. Surtout, on peut en déclarer (et même définir) des
pointeurs et des références à un type inachevé.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
pascal
Guest





PostPosted: Mon Apr 04, 2005 4:42 pm    Post subject: Re: struct declaration Reply with quote



[email]kanze (AT) gabi-soft (DOT) fr[/email] a écrit :

Quote:
pascal wrote:



Pourquoi cette exemple compile sans erreur :





struct X
{
int valX ;
struct X *x;
struct X *y;
};



Parce que c'est légal. Ceci dit, tout en étant légal en C++,
ce n'est pas très idiomatique ; ça ressemble plutôt du C. Mais
dans les deux cas (C ou C++), après avoir vu « struct X », le
compilateur sait qu'il y a un type qui s'appelle X, et que c'est
une classe (ou une structure, dans le cas de C).



alors que :





struct X
{
int valX ;
struct X x;
struct X y;
};





non,ce qui est plutot logique.



Comme tu dis. Une classe X qui contient une instance de la
classe X (qui lui contient une instance de la classe X, ad
infinitum). Il va falloir pas mal de mémoire.



Dans le 1er cas comment le compilateur peut déclarer un
pointeur de type X alors que le bloc de déclaration du type X
n'est pas encore?



Parce que quand il crée une classe, dans un premier temps, tout
ce qu'il faut au compilateur, c'est la taille de chaque élément,
non les détails sur comment le contruire, ou les noms des
champs. Or, la taille d'un pointeur vers une classe est toujours
la même, quelque soit la classe. Donc, pas de problème d'en
déclarer un pointeur vers une classe dont on ne connaît pas
encore les détails. Tandis que pour une instance d'une classe,
il faut bien en connaître la taille de la classe même, ce qui
veut dire avoir vu tous ses éléments.

En fait, en langage de la norme, on parle des types inachevés --
dès que le compilateur voit « struct X » ou « class X », il sait
que X est une classe, et il le considère comme un type connu
mais inachevés. On peut en faire certaines choses, mais non
d'autres. Surtout, on peut en déclarer (et même définir) des
pointeurs et des références à un type inachevé.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Merçi de ton explication.

Il a pas mal de termes employés comme la sémantique,idiomatique que je
ne comprends pas,aurais tu un lien vers ces définition dans le contexte
du langage informatique bien sur?

Back to top
Loïc Joly
Guest





PostPosted: Mon Apr 04, 2005 8:00 pm    Post subject: Re: struct declaration Reply with quote

pascal a écrit :

Tout d'abord, je te conseilles de lire
http://www.giromini.org/usenet-fr/repondre.html sur la façon de répondre
dans les news. En particulier, il est recommandé d'ôter du message
auquel on répond le texte qui est devenu innutile, et de répondre juste
sous le point en question.


Quote:
kanze (AT) gabi-soft (DOT) fr a écrit :

pascal wrote:



Pourquoi cette exemple compile sans erreur :





struct X
{
int valX ;
struct X *x;
struct X *y;
};



Parce que c'est légal. Ceci dit, tout en étant légal en C++,
ce n'est pas très idiomatique ; ça ressemble plutôt du C.

Pas idiomatique signifie ici qu'un développeur C++ "classique" choisira
de ne pas écrire le code ainsi, même s'il est correct. L'écriture par
défaut en C++ pour ça est :
struct X
{
int valX ;
X *x;
X *y;
};



--
Loïc

Back to top
Samuel Krempp
Guest





PostPosted: Mon Apr 04, 2005 10:56 pm    Post subject: Re: struct declaration Reply with quote

le Monday 04 April 2005 18:42, [email]p.thisse (AT) tiscali (DOT) fr[/email] écrivit :
Quote:
Il a pas mal de termes employés comme la sémantique

sémantique => signification, sens.
Pour un langage programmation, ça désigne le comportement, plutot que la
syntaxe.

Quote:
,idiomatique que je
ne comprends pas,aurais tu un lien vers ces définition dans le contexte
du langage informatique bien sur?

idiomatique est encore un mot de linguiste. Les expressions idiomatique d'un
langage sont des expressions précises communément utilisées. par exemple,
"comme tu voudras" est idiomatique (enfin, j'y connais rien moi.)
en programmation c'est pareil, une technique est idiomatique quand c'est une
façon de faire qque chose qui est très largement utilisée, au point de
valoir expression courante du langage. i.e. : ses lignes de code seront
comprises en un coup d'oeil par la plupart des programmeurs.

--
Sam

Back to top
pascal
Guest





PostPosted: Tue Apr 05, 2005 7:40 am    Post subject: Re: struct declaration Reply with quote

Samuel Krempp a écrit :

Quote:
le Monday 04 April 2005 18:42, [email]p.thisse (AT) tiscali (DOT) fr[/email] écrivit :


Il a pas mal de termes employés comme la sémantique



sémantique => signification, sens.
Pour un langage programmation, ça désigne le comportement, plutot que la
syntaxe.



,idiomatique que je
ne comprends pas,aurais tu un lien vers ces définition dans le contexte
du langage informatique bien sur?



idiomatique est encore un mot de linguiste. Les expressions idiomatique d'un
langage sont des expressions précises communément utilisées. par exemple,
"comme tu voudras" est idiomatique (enfin, j'y connais rien moi.)
en programmation c'est pareil, une technique est idiomatique quand c'estune
façon de faire qque chose qui est très largement utilisée, au point de
valoir expression courante du langage. i.e. : ses lignes de code seront
comprises en un coup d'oeil par la plupart des programmeurs.



Ok,

Merçi de ta réponse.

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.