Envoyé par
seriousme
Où ça ?
OK. Il est techniquement possible de faire ce que tu as fait (ça compile) :
1 2 3 4 5 6
|
typedef struct
{
int n;
}
*Integer; |
et
1 2 3 4 5 6 7
|
typedef struct
{
int n;
int private_n;
}
integer_private, *Integer_private; |
((Integer_private)i)->private_n = n;
Horrible cast. Bon, c'est OK, j'avais mal lu. Mais comme dis Medinoc "c'est crade", mais c'est correct. Je prefère quand même ma méthode que je trouve plus 'clean'.
NOTA important
Ca fonctionne de façon portable uniquement parce qu'il n'y a qu'un seul élément commun et que c'est le premier.
Ceci n'est pas portable :
1 2 3 4 5 6 7 8 9
|
/* .h */
struct pub
{
int a;
int b;
};
void f (struct pub *p); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
/* .c */
#include ".h"
struct priv
{
int a;
int b;
int c;
int d;
};
void f (struct pub *p)
{
struct priv *this = (struct priv *) p; |
seul l'accès à 'a' est garanti par le langage. L'accès à b n'est pas portable.
La solution que j'avais proposée est 100% portable.
Partager