Mystère avec un tableau passé en paramètre.
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 ! :aie:
Code:
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.