Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Marc Boyer
Le 12-09-2006, JM a écrit :
Bonjour
Supposons :
1) typedef struct A { int x; int y; }
A variable;
2) typedef struct { int x; int y; } A
A variable
Quand je compile, à priori, il n'y a pas de différence. Est-ce normal?
En C++, oui.
Je pige rien à ce typedef!
Ben, en fait, en C++, il n'y a pas de raison de faire un typedef sur un struct comme tu le fais. C'était utile en C, mais C++ a décidé de faire qu'implicitement, la definition de 'struct A' déclare l'indentifiant de type 'A'.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
Le 12-09-2006, JM <nospamjm@yahoo.com> a écrit :
Bonjour
Supposons :
1) typedef struct A { int x; int y; }
A variable;
2) typedef struct { int x; int y; } A
A variable
Quand je compile, à priori, il n'y a pas de différence.
Est-ce normal?
En C++, oui.
Je pige rien à ce typedef!
Ben, en fait, en C++, il n'y a pas de raison de
faire un typedef sur un struct comme tu le fais.
C'était utile en C, mais C++ a décidé de faire
qu'implicitement, la definition de 'struct A'
déclare l'indentifiant de type 'A'.
Marc Boyer
--
Si tu peux supporter d'entendre tes paroles
Travesties par des gueux pour exciter des sots
IF -- Rudyard Kipling (Trad. Paul Éluard)
Quand je compile, à priori, il n'y a pas de différence. Est-ce normal?
En C++, oui.
Je pige rien à ce typedef!
Ben, en fait, en C++, il n'y a pas de raison de faire un typedef sur un struct comme tu le fais. C'était utile en C, mais C++ a décidé de faire qu'implicitement, la definition de 'struct A' déclare l'indentifiant de type 'A'.
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
JM
Je pige rien à ce typedef!
Ben, en fait, en C++, il n'y a pas de raison de faire un typedef sur un struct comme tu le fais. C'était utile en C, mais C++ a décidé de faire qu'implicitement, la definition de 'struct A' déclare l'indentifiant de type 'A'.
Ok, merci
Je pige rien à ce typedef!
Ben, en fait, en C++, il n'y a pas de raison de
faire un typedef sur un struct comme tu le fais.
C'était utile en C, mais C++ a décidé de faire
qu'implicitement, la definition de 'struct A'
déclare l'indentifiant de type 'A'.
Ben, en fait, en C++, il n'y a pas de raison de faire un typedef sur un struct comme tu le fais. C'était utile en C, mais C++ a décidé de faire qu'implicitement, la definition de 'struct A' déclare l'indentifiant de type 'A'.
Ok, merci
kanze
JM wrote:
Supposons :
1) typedef struct A { int x; int y; }
A variable;
2) typedef struct { int x; int y; } A
A variable
Quand je compile, à priori, il n'y a pas de différence. Est-ce normal?
À peu près. En fait, en C++, avec le « struct A », on a défini un nouveau type, dont le nom est A. Dans ton exemple 1), le typedef ne sert absolument à rien, parce qu'il ne définit aucun symbole. (Et note bien qu'après la déclaration 1) en C, tu ne peux toujours pas écrire : A variable; .)
Ton cas 2) est plus compliqué. Logiquement, tu as défini une structure anonyme, sans nom, et ensuite, tu as dit que A est un synonyme de ce structure. Toujours anonyme. Mais pour des raisons assez complexes, liées à la compatibilité C, si on définit une structure anonyme dans un typedef, il reçoit en fait le premier nom qui lui typedef, donc, ici, A, et n'est plus anonyme.
Je pige rien à ce typedef!
Normalement, c'est un moyen de donner un nom à un type déjà existant. On écrira donc : struct A { int x; int y; } ; typedef A B ; A un ; B deux ; (Ici, un et deux ont le même type.) Rien en fait de plus facile. Seulement, tu t'es heurté à des cas spéciaux présents uniquement pour des raisons de compatibilité C, qui ne font effectivement pas de sens. J'imagine que sans les contraintes de compatibilité C, les deux typedefs ci-dessus seraient illégaux tous les deux, le premier, parce qu'il ne typedefe en fait rien, et le deuxième, parce que sans les hacks de compatibilité C, il n'y a rien que tu peux faire avec une structure anonyme, et il n'y aurait pas de raison à la permettre.
-- 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
JM wrote:
Supposons :
1) typedef struct A { int x; int y; }
A variable;
2) typedef struct { int x; int y; } A
A variable
Quand je compile, à priori, il n'y a pas de différence.
Est-ce normal?
À peu près. En fait, en C++, avec le « struct A », on a défini
un nouveau type, dont le nom est A. Dans ton exemple 1), le
typedef ne sert absolument à rien, parce qu'il ne définit aucun
symbole. (Et note bien qu'après la déclaration 1) en C, tu ne
peux toujours pas écrire :
A variable;
.)
Ton cas 2) est plus compliqué. Logiquement, tu as défini une
structure anonyme, sans nom, et ensuite, tu as dit que A est un
synonyme de ce structure. Toujours anonyme. Mais pour des
raisons assez complexes, liées à la compatibilité C, si on
définit une structure anonyme dans un typedef, il reçoit en fait
le premier nom qui lui typedef, donc, ici, A, et n'est plus
anonyme.
Je pige rien à ce typedef!
Normalement, c'est un moyen de donner un nom à un type déjà
existant. On écrira donc :
struct A { int x; int y; } ;
typedef A B ;
A un ;
B deux ;
(Ici, un et deux ont le même type.) Rien en fait de plus facile.
Seulement, tu t'es heurté à des cas spéciaux présents uniquement
pour des raisons de compatibilité C, qui ne font effectivement
pas de sens. J'imagine que sans les contraintes de compatibilité
C, les deux typedefs ci-dessus seraient illégaux tous les deux,
le premier, parce qu'il ne typedefe en fait rien, et le
deuxième, parce que sans les hacks de compatibilité C, il n'y a
rien que tu peux faire avec une structure anonyme, et il n'y
aurait pas de raison à la permettre.
--
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
Quand je compile, à priori, il n'y a pas de différence. Est-ce normal?
À peu près. En fait, en C++, avec le « struct A », on a défini un nouveau type, dont le nom est A. Dans ton exemple 1), le typedef ne sert absolument à rien, parce qu'il ne définit aucun symbole. (Et note bien qu'après la déclaration 1) en C, tu ne peux toujours pas écrire : A variable; .)
Ton cas 2) est plus compliqué. Logiquement, tu as défini une structure anonyme, sans nom, et ensuite, tu as dit que A est un synonyme de ce structure. Toujours anonyme. Mais pour des raisons assez complexes, liées à la compatibilité C, si on définit une structure anonyme dans un typedef, il reçoit en fait le premier nom qui lui typedef, donc, ici, A, et n'est plus anonyme.
Je pige rien à ce typedef!
Normalement, c'est un moyen de donner un nom à un type déjà existant. On écrira donc : struct A { int x; int y; } ; typedef A B ; A un ; B deux ; (Ici, un et deux ont le même type.) Rien en fait de plus facile. Seulement, tu t'es heurté à des cas spéciaux présents uniquement pour des raisons de compatibilité C, qui ne font effectivement pas de sens. J'imagine que sans les contraintes de compatibilité C, les deux typedefs ci-dessus seraient illégaux tous les deux, le premier, parce qu'il ne typedefe en fait rien, et le deuxième, parce que sans les hacks de compatibilité C, il n'y a rien que tu peux faire avec une structure anonyme, et il n'y aurait pas de raison à la permettre.
-- 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