à propos du cast et du void *
Bonjour, j'ai 2 structures S1 et S2. J'ai 3 fonctions :
Code:
1 2 3 4
|
int mafct(void * p, int flag);
int fonction0(S1 * p);
int fonction1(S2 * p); |
Est-ce que je peux faire ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
int mafct(void * p, int flag)
{
if(flag == 0)
{
return fonction0(p);
}
else
{
return fonction1(p);
}
} |
ou bien dois-je obligatoirement caster mon pointeur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
int mafct(void * p, int flag)
{
if(flag == 0)
{
S1 * pS1 = (S1 *) p;
return fonction0(pS1);
}
else
{
S2 * pS2 = (S2 *) p;
return fonction1(pS2);
}
} |
Et ai-je le droit de faire ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
int mafct(void * p, int flag)
{
void * ptr = NULL;
if(flag == 0)
{
ptr = (S1 *) p;
return fonction0(ptr);
}
else
{
ptr = (S2 *) p;
return fonction1(ptr);
}
} |
Pour ma part, je fais la 1e méthode (sans le cast). Ces méthodes peuvent-elles engendrer des problèmes, comportements indéterminés etc ?
Merci d'avance