macro - C - Programmation
Marsh Posté le 02-08-2007 à 11:56:57
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) |
Marsh Posté le 02-08-2007 à 15:22:11
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 ?
Marsh Posté le 02-08-2007 à 18:11:02
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 à :
|
[edit après réflexion de bjone]Déjà, il te manque un paramètre à memcmp(). Tu ne confonds pas avec strcmp() ???
typedef struct { |
Marsh Posté le 02-08-2007 à 19:20:31
ReplyMarsh Posté le 02-08-2007 à 19:23:23
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
Marsh Posté le 02-08-2007 à 19:24:06
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()...
Marsh Posté le 03-08-2007 à 14:28:53
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?)
Marsh Posté le 03-08-2007 à 18:01:12
djobidjoba a écrit : |
int toto=4 |
Marsh Posté le 05-08-2007 à 12:07:58
toujours pas clair, mais en c++, tu as la std::map pour ça, mais en c++
Marsh Posté le 02-08-2007 à 11:42:44
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 ?