kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008
-
11 déc. 2005 à 08:26
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008
-
12 déc. 2005 à 08:53
Bonjour,
je galere un peu avec les #defines, en effet j'ai 4 fichiers dont 3 identiques a l'exeption des defines qui sont differents, je ne sais pas trop comment faire pour tout regrouper en 1 seul fichier. Ces defines modifient les types des fichiers, et je ne sais pas comment lui dire 'si je veux utiliser le fichier qui gere ce type la, alors utiliser ce define'.
Merci.
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 11 déc. 2005 à 13:54
Je pige rien. Si t'as 3 fichiers identiques (pk les define seraien
différents ?), tu peux en supprimer deux ... A mon avis, il y a un
problème dans la structure de ton programme. Détails un peu plus :)
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 11 déc. 2005 à 16:50
templates?
ben en gros j'appelle des fonctions, qui feront la meme chose, dans chaque fichier, mais elles vont recevoir un type different qui sera dans les #define,
exemple dans le fichier 1 j'ai:
#define LINT long int
fonction1(LINT) {ect}
et dans le deuxieme
#define UINT unsigned int
fonction1(UINT) {ect}
ect
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 11 déc. 2005 à 17:33
Bah pour l'instant, pour quelle raison tu ne peux pas rassembler toutes tes fonctions? Un cast ne suffit-il pas? Tu écris les fonctions pour le type le plus grand, et pour les autres tu castes, et tu castes...
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 11 déc. 2005 à 17:45
non, je recode printf et j'utilise ca pour les flag h, l ou L, il faut prendre un argument de type short/long/double unsigned/int et se le trimballer, a moins que je fasse erreur mais il me semble que c'est quelque chose dans le genre..
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 11 déc. 2005 à 17:51
Tu sais bien que printf n'a qu'un corps, et il ne sait pas ce que tu va lui passer comme type de données. Par exemple, tu peux considérer que ce sont tous des int et après tu fais des cast.
Mais peut être que je comprends mal, quel est le prototype de la fonction que tu codes?
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 11 déc. 2005 à 18:07
je ne sais pas trop,
j'ai un "int my_printf (char *str, ...)"
je lui envoie un int par exemple avec un %d, il va la:
void my_print_no_mt(va_list *args, t_f *flag) {
flag->t 'd' || flag->t 'i' ? my_printnbr(flag, va_arg(*args, int)) : 0; ... }
puis my_printnbr recuper l'int et l'affiche
si je lui envoie un long int, avec %ld, il va la:
void my_print_l(va_list *args, t_f *flag) {
flag->t 'd' || flag->t 'i' ? pnbr_l(flag, va_arg(*args, long int)) : 0; ... }
et pareil my_printnbr recupere le long int et l'affiche
je m'y suis peutetre totalement mal pris je ne sais pas...
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 11 déc. 2005 à 18:11
oui, car il est possible d'afficher un int avec %c, du coup faudra l'interpréter comme un char. Ce que fait printf c'est analyser la chaine, quand il tombe sur un %d, il considère que l'argument qui vient est un int.
Par exemple, tu remarquera que tu peux très bien écrire ceci:
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 11 déc. 2005 à 18:18
oui pour le char j'avais en effet remarquer, si je ne prends que des int et que c'est un long ca bugger si j'entre quelque chose qui depasse un int (long unsigned int)? sinon je met des long long int partout ca passe?
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 11 déc. 2005 à 21:07
J'ai pas vraiment compris comment ca marchait en fait,
si j'envoie un long a printf il faut bien que je le recupere avec un long?
donc je vais toujours me retrouver avec mes 3 fichiers?
ou alors je mets des long long int partout comme ca tout logera forcement dedans? (mais alors quel est l'interet des flags modificateur de type)
ou alors le type qui recupere correspond au flag, et envoie a des fonctions qui recupere en long long int par exemple?
J'ai du loupe un truc en tous cas, desole je debute =)
kaervas
Messages postés51Date d'inscriptionvendredi 25 novembre 2005StatutMembreDernière intervention19 avril 2008 12 déc. 2005 à 08:53
NitRic oui au final j'ai fait quelque chose comme ca,
mais disons que les fonctions pour traiter les %ld, %hd %d sont les memes a part le type qui changeait, mais pas grave les 3 fichiers sont faits maintenant et au moins ca marche =)
Pour les macros j'ai pas vraiment compris comment ca marchait, elif endif ca me dit pas grand chose il faudrait que je me documente un peu (: