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

  FORUM HardWare.fr
  Programmation
  C

  macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

macro

n°1594827
djobidjoba
Posté le 02-08-2007 à 11:42:44  profilanswer
 

salut,
 
j'ai 3 fichiers donc voici un extrait
 
fichier ECR_SIM.h

const char ecr_sim[]={
0,128,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
erc...


 
fichier afficher_bmp.h

//Entête de afficher_bmp.c
#ifndef _afficher_bmph
#define _afficher_bmph
 
unsigned char afficher_bmp(unsigned char * id_bmp,unsigned int attente_touche);
#define ecran(id_bmp) id_bmp
 
#endif //_afficher_bmph


 
 
afficher_bmp.c
 

#include "oem.h"
#include "libgr.h"
#include "afficher_bmp.h"
 
//ecrans
#include "ECR_SIM.h"
//
 
unsigned char afficher_bmp(unsigned char * id_bmp,unsigned int attente_touche)
{
 unsigned char touche=0;
 DisplayBitmap(0, 0, ecran(id_bmp), 8, _OFF_);
 if (attente_touche==1)
  touche = getchar();
 return touche;
}


 
mon problème se situe au niveau du DisplayBitmap qui prend en paramètre le buffer definis dans le .H  
je ne veux pas inclure mon ECR_SIM.h  dans chacun de mes autres fichiers C mais juste afficher_bmp.h et ensuite appeler afficher_bmp avec un afficher_bmp ("ecr_sim",0) par exemple.
j'ai fait une macro #define ecran(id_bmp) id_bmp pour gérer ca mais en fait non ca risque pas de marcher vu qu'une macro est interprétée au moment de la compilation
avez-vous une idée poru mon pb ?

mood
Publicité
Posté le 02-08-2007 à 11:42:44  profilanswer
 

n°1594836
djobidjoba
Posté le 02-08-2007 à 11:52:42  profilanswer
 

.


Message édité par djobidjoba le 02-08-2007 à 11:57:43
n°1594840
djobidjoba
Posté le 02-08-2007 à 11:56:57  profilanswer
 

bon meme avec un switch ca va etre lourd étant donnée qu'on travail sur des chaines, ma question se résume donc à :
 
comment simplifier ce code :
 

if (memcmp(id_bmp,"ecr_sim" )==0)
  DisplayBitmap(0, 0, ecr_sim, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim2" )==0)
  DisplayBitmap(0, 0, ecr_sim2, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim3" )==0)
  DisplayBitmap(0, 0, ecr_sim3, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim4" )==0)
  DisplayBitmap(0, 0, ecr_sim4, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim5" )==0)
  DisplayBitmap(0, 0, ecr_sim5, 8, _OFF_);

Message cité 1 fois
Message édité par djobidjoba le 02-08-2007 à 11:57:27
n°1594994
tpierron
Posté le 02-08-2007 à 15:22:11  profilanswer
 

Heu, est-ce qu'il y a une impossibilité technique à mettre quelque part :
 

extern const char ecr_sim[];


 
Pour que tu puisses utiliser "ecr_sim" partout où tu veux ?

n°1595142
djobidjoba
Posté le 02-08-2007 à 17:49:26  profilanswer
 

merci c'est ok avec un "static"

n°1595156
Sve@r
Posté le 02-08-2007 à 18:11:02  profilanswer
 

djobidjoba a écrit :

bon meme avec un switch ca va etre lourd étant donnée qu'on travail sur des chaines, ma question se résume donc à :
 
comment simplifier ce code :
 

if (memcmp(id_bmp,"ecr_sim" )==0)
  DisplayBitmap(0, 0, ecr_sim, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim2" )==0)
  DisplayBitmap(0, 0, ecr_sim2, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim3" )==0)
  DisplayBitmap(0, 0, ecr_sim3, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim4" )==0)
  DisplayBitmap(0, 0, ecr_sim4, 8, _OFF_);
else if (memcmp(id_bmp,"ecr_sim5" )==0)
  DisplayBitmap(0, 0, ecr_sim5, 8, _OFF_);



 
[edit après réflexion de bjone]Déjà, il te manque un paramètre à memcmp(). Tu ne confonds pas avec strcmp() ???
 

typedef struct {
    char *string;
    int val;
} t_analyse;
 
t_analyse tabAnalyse[]={
    {"ecr_sim", ecr_sim1},
    {"ecr_sim2", ecr_sim2},
    {"ecr_sim3", ecr_sim3},
    {"ecr_sim4", ecr_sim4},
    {"ecr_sim5", ecr_sim5},
    {NULL, 0}
};
t_analyse *ptAnalyse;
 
for (ptAnalyse=tabAnalyse; ptAnalyse->string != NULL; ptAnalyse++)
{
    if (strcmp(id_bmp, ptAnalyse->string) == 0)
    {
        DisplayBitmap(0, 0, ptAnalyse->val, 8, _OFF_);
        break;      // Facultatif
    }
}


Message édité par Sve@r le 02-08-2007 à 19:27:09

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1595185
bjone
Insert booze to continue
Posté le 02-08-2007 à 19:20:31  profilanswer
 

pareil, le break est pas si faculatif sinon c'est le dernier qui gagne :)

n°1595188
bjone
Insert booze to continue
Posté le 02-08-2007 à 19:23:23  profilanswer
 

bin il doit y avoir moyen de gagner un peu avec d'abord un test de "ecr_sim" limité à la bonne taille, puis la gestion de la suite :D

n°1595189
Sve@r
Posté le 02-08-2007 à 19:24:06  profilanswer
 

bjone a écrit :

pareil, le break est pas si faculatif sinon c'est le dernier qui gagne :)


Ben non !!! Je ne pense pas que "id_bmp" puisse être égal à la fois à "ecr_sim", "ecr_sim1", "ecr_sim2" etc... => le dernier qui gagne est forcément le seul à gagner
Sauf que c'est pas memcmp() qu'il faut utiliser (d'ailleurs il lui manque un paramètre) mais strcmp()...


Message édité par Sve@r le 02-08-2007 à 19:25:52

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1595191
bjone
Insert booze to continue
Posté le 02-08-2007 à 19:26:26  profilanswer
 

heu oui pardon :lol: :D

mood
Publicité
Posté le 02-08-2007 à 19:26:26  profilanswer
 

n°1595495
djobidjoba
Posté le 03-08-2007 à 14:28:53  profilanswer
 

merci vous deux, effectivement il manquait un param à memcmp (j'avais tapé ca de tête, c'est "valider votre message" qui a compilé)
sinon j'ai utilisé un static pour éviter les redéfinition de constantes.
sinon je me pose toujours la question de savoir s'il est possible de faire ca en C :

 

id_bmp="toto"
toto=4
afficher(id_bmp) ====> 4

 

sans passer par un tableau de correspondance (avec une notation spéciale peut etre?)

Message cité 1 fois
Message édité par djobidjoba le 03-08-2007 à 14:31:05
n°1595610
matafan
Posté le 03-08-2007 à 16:14:34  profilanswer
 

Non, ce n'est pas possible.

n°1595717
Sve@r
Posté le 03-08-2007 à 18:01:12  profilanswer
 

djobidjoba a écrit :


sinon je me pose toujours la question de savoir s'il est possible de faire ca en C :
 
id_bmp="toto"
toto=4
afficher(id_bmp) ====> 4
 
sans passer par un tableau de correspondance (avec une notation spéciale peut etre?)


 

int toto=4
int *id_bmp=&toto
afficher(*id_bmp)   ====> 4


Message édité par Sve@r le 03-08-2007 à 18:01:39

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1595939
bjone
Insert booze to continue
Posté le 05-08-2007 à 12:07:58  profilanswer
 

toujours pas clair, mais en c++, tu as la std::map pour ça, mais en c++ :)


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

  macro

 

Sujets relatifs
Ch. cours particulier Visual Basic (pour macro CATIA) - URGENT -macro insertion image word depuis un fichier
Macro OpenOffice.orgMacro complementaire (IsAddin)
<VBA EXCEL> Macro qui remplace des liens par leur valeur...Macro unique pour plusieurs fichiers excels
Excel macro pour appliquer fonction sur une colonnedécomposer une adresse par macro sur excel
macro qui détermine l'action d'un commandbutton[VBA/EXCEL] Ligne ignorée dans la macro
Plus de sujets relatifs à : macro


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)