Bonjour, j'ai 2 structures S1 et S2. J'ai 3 fonctions :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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