utilisation de types ou structures définis ailleurs ... [ansi] - C - Programmation
Marsh Posté le 24-01-2005 à 11:50:20
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.
Marsh Posté le 24-01-2005 à 13:23:11
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 !
Marsh Posté le 24-01-2005 à 16:25:17
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 ):
|
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 :
|
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.
Marsh Posté le 24-01-2005 à 18:14:12
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 :
|
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.
Marsh Posté le 24-01-2005 à 18:34:08
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 !
Marsh Posté le 24-01-2005 à 19:29:31
laisse tomber -ansi pour le code du module, pour le reste tu peux le conserver
Marsh Posté le 24-01-2005 à 11:03:51
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 ):
... 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 :
..cela donnait : "warning : parameter has incomplete type" ... obligé de passer par un pointeur pour enlever l'erreur :
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