Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1263 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [ansi] utilisation de types ou structures définis ailleurs ...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ansi] utilisation de types ou structures définis ailleurs ...

n°960503
allawos
Posté le 24-01-2005 à 11:03:51  profilanswer
 

Bonjour, j'essaye de recompiler mon programme C avec l'option -ansi ... et j'obtient l'erreur "parse error before "u_int_16" (ligne 3 dans le code suivant ):
 
 

Code :
  1. /* fichier .h */
  2. ERREUR getDeviceOnAllBusses(struct usb_bus *bus,
  3.                             u_int_16 idVend,
  4.                             u_int_16 idProd,
  5.                             struct usb_device **dev);


 
... sachant que j'ai avant, de nombreuses erreurs dues à l'inclusion de usb.h ... mais que je ne cherche pas à règler celles-la.
 
Savez-vous s'il y a un truc particulier pour la déclaration de paramètres de fonctions, dont le type est déclaré ailleur ?
 
J'avais aussi un problème sur la fonction :

Code :
  1. /* fichier.h */
  2. ERREUR printConfigDescriptor(struct usb_config_descriptor confDescr);


..cela donnait : "warning : parameter has incomplete type" ... obligé de passer par un pointeur pour enlever l'erreur :

Code :
  1. /* fichier.h */
  2. ERREUR printConfigDescriptor(struct usb_config_descriptor *confDescr);


 
Si vous avez des infos sur la facon d'utiliser des structures ou types particuliers, définis ailleurs ... si l'erreur vient de la ! Merci

mood
Publicité
Posté le 24-01-2005 à 11:03:51  profilanswer
 

n°960552
++fab
victime du syndrome IH
Posté le 24-01-2005 à 11:50:20  profilanswer
 

salut,
 
abandonnes l'option -ansi. Quand tu fais un module, tu fais du C pour gcc, et tu utilises des extensions non standard de gcc (initialisation balisée, __init, __exit, ...). Ca ne compilera pas avec autre chose que gcc, pas la peine de se prendre la tete.
Compile avec -Wall pour etre portable pour gcc, sur toutes les architectures.
 

n°960656
allawos
Posté le 24-01-2005 à 13:23:11  profilanswer
 

Ben ouais, pour le module, je comptais laisser tomber l'ansi ... mais en fait, j'ai d'abord une petite appli n'utilisant que /usr/include/usb.h, et permettant de charger un firmware sur un microcontrolleur. Mes caméras usb sont en fait séries, mais branchées sur un boitier micro-controlleur cypress usb. Donc je charge le firmware, le cypress réénumère et la, mon module le prend en charge.
J'ai pour directives de coder en ansi, donc je voulais m'y référer chaque fois que possible. Dans tous les cas, je pense que je vais quand même laisser tomber cette norme.
 
Merci pour ta réponse !

n°960862
Emmanuel D​elahaye
C is a sharp tool
Posté le 24-01-2005 à 16:25:17  profilanswer
 

allawos a écrit :

Bonjour, j'essaye de recompiler mon programme C avec l'option -ansi ... et j'obtient l'erreur "parse error before "u_int_16" (ligne 3 dans le code suivant ):

Code :
  1. /* fichier .h */
  2. ERREUR getDeviceOnAllBusses(struct usb_bus *bus,
  3.                             u_int_16 idVend,
  4.                             u_int_16 idProd,
  5.                             struct usb_device **dev);


 
... sachant que j'ai avant, de nombreuses erreurs dues à l'inclusion de usb.h ... mais que je ne cherche pas à règler celles-la.
 
Savez-vous s'il y a un truc particulier pour la déclaration de paramètres de fonctions, dont le type est déclaré ailleur ?
 


Le 'aiileurs' doit être inclus. C'est certainement un .h. Celui-ci doit évidemment être protégé contre les inclusions multiples.
 
http://mapage.noos.fr/emdel/codage [...] ser_source
http://mapage.noos.fr/emdel/codage.htm#organiser

Citation :


J'avais aussi un problème sur la fonction :

Code :
  1. /* fichier.h */
  2. ERREUR printConfigDescriptor(struct usb_config_descriptor confDescr);


..cela donnait : "warning : parameter has incomplete type" ... obligé de passer par un pointeur pour enlever l'erreur :

Code :
  1. /* fichier.h */
  2. ERREUR printConfigDescriptor(struct usb_config_descriptor *confDescr);


 
Si vous avez des infos sur la facon d'utiliser des structures ou types particuliers, définis ailleurs ... si l'erreur vient de la !
 


Idem. Inclure le header qui va bien... Ceci-dit, passer une structure en paramètre est souvent une erreur de conception (en tout cas, c'est pas efficace). Il est en effet préférable de passer l'adresse de celle-ci.
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°960952
matafan
Posté le 24-01-2005 à 18:14:12  profilanswer
 

Deux commentaires en complement de ce qui a deja ete dit :
 
1) Tu peux parfaitement passer un pointeur vers un structure dont tu n'as pas la definition interne, meme en C ansi. Tu peux faire :
 

Code :
  1. struct s;
  2. ...
  3. void func(struct s *ptr) { ... }


 
En general le "struct s;" sera mis dans un .h.
 
2) Par contre, tu ne peux evidemment pas passer en parametre une structure si tu n'as pas sa definition interne, que ce soit en C ansi ou autre. Lors de la compilation il faut reserver sur la pile une place suffisante pour les parametres, et il faut donc conaitre la taille exacte de la structure.
 
Bref tu peux passer un pointeur vers un type incomplet, mais tu ne peux pas passer directement un type incomplet.

n°960987
allawos
Posté le 24-01-2005 à 18:34:08  profilanswer
 

OK merci à tous.
 
En fait, j'avais évidemment inclu le .h définissant ma structure ... mais comme celui-ci ne compile pas en ansi, ben au moment ou le compilo voit mon prorotype, il rale, normal.
 
Bon du coup, j'ai effectivement viré le passage par structure pour passer par paramètre, c'est plus propre en effet, ... et je laisse tomber l'ansi !
 
Merci à tous !

n°961045
++fab
victime du syndrome IH
Posté le 24-01-2005 à 19:29:31  profilanswer
 

laisse tomber -ansi pour le code du module, pour le reste tu peux le conserver ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [ansi] utilisation de types ou structures définis ailleurs ...

 

Sujets relatifs
[Java] Utilisation en multiprocesseurUtilisation de Group By
Utilisation mémoire importantelib pour stabilité des types d'une archi à l'autre
Utilisation de dreamweaver....[Fortran 95] Conversion de types numériques en chaine de caractères
références, utilisation de sendAndLoad dans un constructeurUtilisation de sql en php + problème php
Utilisation fonction md5crypt (ou crypter en md5 unix)[Java] Utilisation d'un vecteur d'objets
Plus de sujets relatifs à : [ansi] utilisation de types ou structures définis ailleurs ...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR