Bonjour à tous et tout d'abord bonne et heureuse année 2017.
Je suis confronté à un petit problème de compréhension.
J'ai acheté le livre 'Le guide complet du langage C' aux éditions Eyrolles et dans ce livre il est écrit au chapitre 6.1 page 290 ceci :
On peut déclarer un prototype de fonctions comme suit et ils seront équivalents avec des tableaux en arguments muets:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 void function( int * t ); void function( int t[10] ); void function( int t[] );
et cela fonctionne très bien en C sous Visual Studio, ou Keil.
Maintenant si je considère qu'une structure peut avoir une représentation sous la forme d'un tableau, je peux éventuellement écrire ce qui suit:
On dirait que le compilo (qui n'est pas visual) fait la distinction entre * et [].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 /** Déclaration anticipée **/ struct enreg; typedef struct enreg Ts_enreg; /** Prototypes **/ void function_ptr( Ts_enreg * objects); //---> compilateur dit OK ! void function_array( Ts_enreg objects[]); //---> compilateur dit KO car enreg n'est pas encore défini !!
J'ai contacté le support technique et la réponse est la suivante :
Qu'en pensez-vous ?Si votre manuel prétend que cela est censé fonctionner, vous avez besoin d'un autre, parce que celui que vous avez n'est pas réellement sur le langage de programmation C.
"Les prototypes MyFunc_1 et MyFunc_2 sont équivalents"
Non, ils ne sont pas. C'est une chose de déclarer une fonction qui prend un type inconnu, mais tout à fait différent si elle prend un pointeur vers ce type inconnu.
Partager