Bonjour,
Je cherche à écrire une macro qui me permette de saisir un nombre variable de paramètre et j'obtiens quelque chose qui à priori fonctionne, mais ca ne me plait pas trop.
Voici le code de la macro:
Code :
- #define Log(_X,_Z)
- do {
- if (mylog == true) {
- InternalLog(_X,0,__FILE__,__LINE__,Message##_Z);
- }
- }while(0)
|
La fonction Message :
Code :
- char * Message(const char *msg,...) {
- static char szBuffer[1024] = {0};
- va_list vl; va_start(vl,msg); vsprintf(szBuffer,msg,vl); va_end(vl);
- return szBuffer;
- }
|
Et du coup, je peux appeler ma macro par exemple de la facon suivante :
Code :
- Log(LOGLEVEL_TRACE,("Test %d %d",val1,val2));
|
Avec la bidouille qui consiste à concaténer la fonction Message avec _Z, _Z étant égal à ("mon message %d %d",val1,val2) dans mon exemple, j'arrive à appeler une macro avec un nombre variable de paramètre, mais à condition d'avoir les parenthèses autour de "mon message %d %d",val1,val2. Sinon, je me prends un warning du compilateur qui me dit qu'il n'y a pas le bon nombre de paramètre (normal).
Du coup, quand on lit la syntaxe de la ligne, on pense qu'il y a une erreur et j'aimerais supprimer ce dernier problème, mais je ne vois pas comment faire (mes connaissances en préprocesseur sont limitées), alors peut-être certains ont une idée ou une astuce pour faire cela ?
Précision : il est important pour moi que Log soit une macro et non une fonction (avec une fonction je n'aurais pas ce problème), car je dois pouvoir retirer les lignes de log à la compilation selon si je suis en debug ou en release.
Merci d'avance
edit : fonction wysiwyg du forum qui deconne avec les balises code
Message édité par xilebo le 12-07-2007 à 15:38:11