Bonjour à tou(te)s,

je suis tombé sur un comportement étrange de mon compilateur C (Visual Studio 10) !

J'ai un type tableau d'entier.
J'ai un fonction avec un paramètre de ce type.
Dans la fonction je veux un pointeur sur ce paramètre.
--> pas moyen d'avoir du code sans warning autrement qu'en ajoutant un cast affreux !

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
17
 
typedef int foo [5] ;
 
int aze ( foo f )
    {
    // foo * ff = f ;     // code qui marche mais avec warning (les niveaux d'indirection de 'foo (*)' et de 'int *' sont différents)
    // foo * ff = &f ;    // code qui semble logique mais avec warning (les niveaux d'indirection de 'foo (*)' et de 'int **' sont différents) et plantage !
    foo * ff = (foo*)f ;  // obligé d'ajouter ce cast moche et pas très logique pour éviter le warning
    return (*ff)[0] ;
    }
 
int main ()
    {
    foo f = { 654 } ;
    int x = aze( f ) ;
    return x ;  // tout est ok : x == 654
    }
Y a-t-il un moyen propre de faire ça ?
Ici la boule de gomme, à vous les studieux !

PS : oui je sais, ce bout de code ne sert à rien... c'est juste une version ultra simplifiée qui met en évidence mon problème.